通过ASP.NET执行数据命令查询



我正在尝试针对本地数据库执行数据命令查询,但认为我可能已经混合或排除了一些语法...我一直在尝试跟随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
}

最新更新