【问题标题】:Populate multiple text boxes with SqlDataReader使用 SqlDataReader 填充多个文本框
【发布时间】:2014-05-02 04:22:02
【问题描述】:

我正在尝试使用我的数据库信息填充 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!");
    }
}

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

【问题讨论】:

  • 欢迎来到 StackOverflow。请更具体地说明它是如何失败的,包括发布完整的堆栈跟踪。您可以通过命令提示符或 GUI 界面程序访问数据库吗?
  • 选择 * 或选择

标签: c# sql sqldatareader


【解决方案1】:

错误在这行代码

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);

【讨论】:

    【解决方案2】:

    首要任务是正确地编写这一行:

    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的信息。

    【讨论】:

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

      有效的语句应该是:

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

      【讨论】:

        【解决方案4】:

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

        始终使用参数化查询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);
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2019-02-22
          • 1970-01-01
          • 1970-01-01
          • 2013-08-09
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多