我正在尝试对本地数据库执行数据命令查询,但我想我可能已经混淆或遗漏了一些语法...我一直在尝试跟随MSDN的教程,但他们的代码部分是显示对我来说没有多大意义。我已经打开了与DB的连接,但我无法弄清楚如何从用户输入文本框传递参数并使用带有该参数的select语句,该语句也使用LIKE语句返回结果集,然后我可以循环匹配的记录。 1)点击我的搜索按钮后,它说我有一个无效的对象名称'name'这是一个问题。 2)您是否也可以查看我的代码并让我知道我是否要尝试使用参数执行此select语句并返回错误的结果集?
这是我到目前为止所拥有的
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();
}
}
答案 0 :(得分:2)
没有执行该命令,您在哪里初始化该读取器?围绕SqlCommand的使用过早关闭。你错过了一些代码吗?
然后我会在LIKE子句后删除通配符并将它们添加到参数值中 最后,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
的新副本
我建议改变的另一点是连接打开时的try / catch。如果你没有发出什么问题的信号,你就很难解决问题。如果您不想要,此时构建一个日志基础结构,至少在标签中报告异常消息
好的,对不起,如果我很无聊,但还有另一段代码不清楚:
using (var Sqlcmd = new System.Data.SqlClient.SqlCommand("Delete From Name", conn))
{
cmd.ExecuteNonQuery();
}
此代码从名为Name
的表中删除一切,鉴于上下文,它似乎有误。
编辑关注您的评论
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
}