使用SqlDataReader填充多个文本框

时间:2014-05-02 04:22:03

标签: c# sql sqldatareader

我正在尝试使用我的数据库信息填充11个文本框。

private void button5_Click(object sender, EventArgs e)
{
    SqlConnection CN = new SqlConnection();

    CN.ConnectionString = cons;

    try
    {
        CN.Open();

        SqlCommand cmd = new SqlCommand("SELECT  FROM Lista1 WHERE DescripcionNombre = "
        ' + comboBox1.text + '
        "",
        CN)
        ;

        SqlDataReader myReader = cmd.ExecuteReader();

    }
    catch
    {
        MessageBox.Show("You failed!");
    }
}

总是失败,甚至无法做到这一点......

4 个答案:

答案 0 :(得分:2)

错误出现在这行代码中

SqlCommand cmd = new SqlCommand("SELECT  FROM Lista1 WHERE DescripcionNombre = "' + comboBox1.text + '"", CN);

它应该是这样的

SqlCommand cmd = new SqlCommand("SELECT * FROM Lista1 WHERE DescripcionNombre = '" + comboBox1.text + """, CN);

或者

SqlCommand cmd = new SqlCommand("SELECT Column1_name, column2_name FROM Lista1 WHERE DescripcionNombre = '" + comboBox1.text + "'", CN);

由于您没有选择任何列,因此无法按预期工作。

并且在旁注中传递参数值而不是直接从字段值传递值。这样你就可以避免SQL Injection

SqlCommand cmd = new SqlCommand("SELECT Column1_name, column2_name FROM Lista1 WHERE DescripcionNombre = @DescripcionNombre", CN);
cmd.Parameters.AddWithValue("@DescripcionNombre", comboBox1.text);

答案 1 :(得分:1)

第一项业务是正确编写此行:

SqlCommand cmd = new SqlCommand("SELECT  FROM Lista1 WHERE DescripcionNombre = "' + comboBox1.text + '"", CN);

这不是有效的SQL或C#。您需要指定要从表中检索的列。如果想要所有列,则使用通配符。下一步的业务是学习如何连接字符串。如果你想要单引号成为字符串文字的一部分,那么它们必须在双引号内。

SqlCommand cmd = new SqlCommand("SELECT * FROM Lista1 WHERE DescripcionNombre = '" + comboBox1.text + "'", CN);

这是非常基本的东西。你应该花些时间阅读一两个教程。

完成后,您需要实际读取数据读取器中的数据。 This可以帮助解决这个问题。注意在这些示例中使用参数而不是字符串连接?您可以详细了解here

答案 2 :(得分:1)

SqlCommand cmd = new SqlCommand("SELECT  FROM Lista1 WHERE DescripcionNombre = "' + comboBox1.text + '"", CN);
  1. 您没有在SELECT
  2. 中选择任何列或表达式
  3. 您的单引号和双引号在串联中向后
  4. 你应该养成使用参数而不是连接SQL的习惯(出于几个原因,其中最重要的是SQL注入漏洞)
  5. 有效语句将是:

    SqlCommand cmd = new SqlCommand("SELECT * FROM Lista1 WHERE DescripcionNombre = '"
                                   + comboBox1.text 
                                   + "'", CN);
    

答案 3 :(得分:1)

您忘记提及需要在查询中获取的列名

始终使用参数化查询How does SQLParameter prevent SQL Injection

SqlCommand cmd = new SqlCommand("SELECT * FROM Lista1 WHERE DescripcionNombre=@DescripcionNombre, CN);
cmd.Parameters.AddWithValue("@DescripcionNombre", comboBox1.text);

但你的查询应该是这样的

SqlCommand cmd = new SqlCommand("SELECT * FROM Lista1 WHERE DescripcionNombre = '" + comboBox1.text + "'", CN);