我正在尝试针对本地数据库执行数据命令查询,但认为我可能已经混合或排除了一些语法...我一直在尝试跟随MSDN的教程但是他们所显示的代码部分对我来说并不多。我已经与数据库打开了连接,但是我不知道如何从用户输入文本框中传递参数,并使用该参数使用Select语句,该参数也使用类似语句返回结果集匹配的记录。1)按下我的搜索按钮后,就是说我有一个无效的对象名称"名称",这是一个问题。2)您还可以查看我的代码,并让我知道我是否要尝试执行此选择语句,然后返回结果集?
这是我到目前为止的
System.Data.SqlClient.SqlDataReader dReader;
protected void btnFirst_Click(object sender, EventArgs e)
{
using (var conn = new System.Data.SqlClient.SqlConnection(@"Server=LOCALHOST; Database=Student;Trusted_Connection=True;"))
{
try
{
conn.Open();
}
catch (Exception ex)
{
lblSearch.Text = "connection problem!";
}
using (var Sqlcmd = new System.Data.SqlClient.SqlCommand("Delete From Name", conn))
{
cmd.ExecuteNonQuery();
}
using (var Sqlcmd = new System.Data.SqlClient.SqlCommand("SELECT Name, Address from Student where Name LIKE '%@Name%'", conn))
{
cmd.Parameters["@Name"].Value = txtSearch.Text;
}
lblFirst.Text = "@Name";
String s = "";
while (dReader.Read())
{
s+= dReader["@Name"].ToString();
}
txtSearch.Text = s;
dReader.Close();
}
}
命令没有执行,您从哪里获得该读者初始化的?SQLCommand周围的使用过早关闭。您错过了一些代码吗?
然后,我将在类似子句之后删除通配符并将其添加到参数值中。
最后,sqldatareader在列名上工作,而不是参数。
因此,您需要解决其真实姓名所需的列
using (var Sqlcmd = new SqlCommand("SELECT Name, Address from Student " +
"where Name LIKE @Name", conn))
{
cmd.Parameters.AddWithValue("@Name", "%" + txtSearch.Text "%");
using(SqlDataReader dReader = cmd.ExecuteReader())
{
StringBuilder s = new StringBuilder(1024);
while (dReader.Read())
{
s.Append(dReader["Name"].ToString());
}
txtSearch.Text = s.ToString();
}
}
如果您返回了大量的记录,我建议使用StringBuilder而不是字符串,以避免在每个循环中创建字符串s
的新副本
我建议更改的另一点是连接打开的尝试/捕获。如果您没有信号是什么问题,那么您将很难解决问题。如果您不想要,此时构建一个日志基础架构,至少在标签中报告了例外消息
好吧,对不起,如果我很无聊,但是还有另一个尚不清楚的代码:
using (var Sqlcmd = new System.Data.SqlClient.SqlCommand("Delete From Name", conn))
{
cmd.ExecuteNonQuery();
}
此代码删除所有内容从名为Name
的表中,在上下文中似乎是错误的。
edit 以下您的评论下面的评论
using(SqlDataReader dReader = cmd.ExecuteReader())
{
// First item displayed on the textbox
if(dReader.HasRows)
txtSearch.Text = dReader["Name"].ToString();
// Continue looping on every record and copy the name field in a list
List<string> names = new List<string>()
while (dReader.Read())
{
names.Add(dReader["Name"].ToString());
}
// Here you have you list of names in memory to be used where you need it
}