【问题标题】:how to write insert query in c#?如何在 C# 中编写插入查询?
【发布时间】:2012-03-31 09:57:55
【问题描述】:

我正在开发一个 c# web 应用程序...我想将数据从文本框插入到数据库...我已经编写了查询,但它不起作用:

string insertquery = 
    @"INSERT INTO [LocationInfo]([LocationIP], [LocationName]) 
      VALUES ('" + TextBox2.Text + "','" + TextBox3.Text + "') 
      WHERE LocationID=null";

SqlCommand cmd = new SqlCommand(insertquery, sqlcon_QOEMetrices);
cmd.ExecuteNonQuery();

sqlcon_QOEMetrices 是我的数据库连接对象...

如果有任何语法错误或缺少任何语句,请告诉我......

【问题讨论】:

  • 你好sql注入!!
  • 第一个问题:您的代码容易受到 SQL 注入攻击。 不要将值直接包含到您的 SQL 中。请改用参数化 SQL 语句。第二个问题:“它不起作用”是对正在发生的事情的糟糕描述。告诉我们发生了什么。如果有例外,请向我们提供完整的详细信息。如果它没有编译,给我们编译时错误。如果它插入了错误的值,请告诉我们。
  • 从查询中删除“Where LocationID=null”
  • 使用 sqlparam 将值插入到表中以防止 sql 注入
  • 另外,“它不工作”,是你得到的错误吗?

标签: c# sql-server


【解决方案1】:

您可以编写如下命令的查询

SqlCommand comm = new SqlCommand("INSERT INTO desg VALUES (@txtsno, @txtdesg, @txtbasic)", connection);

your_db.Open();
try {
    comm.Parameters.AddWithValue("@txtsno", txtsno.Text.Trim());
    comm.Parameters.AddWithValue("@txtdesg", txtdesg.Text.Trim());
    comm.Parameters.AddWithValue("@txtbasic", txtbasic.Text.Trim());
    comm.ExecuteNonQuery();
    comm.Dispose();
    comm = null;
}
catch(Exception ex)
{
    throw new Exception(ex.ToString(), ex);
}
finally
{
    your_db.Close();
}

【讨论】:

  • 1.在“INSERT INTO desg”之后命名您的列,如果有人重新排序您的表列,您将插入错误的列 2. 使用 using 打开 SqlConnection(然后您可以删除 finally 部分),3. 删除您的捕获,因为它不会添加任何值
【解决方案2】:

您不应将 SQL 查询与表单中的直接值连接起来。

您的 ADO.NET 代码可能如下所示:

        string query = "INSERT INTO [LocationInfo]([LocationIP], [LocationName])" +
                       "VALUES (@locIP, @locName)";

        SqlCommand cmd = new SqlCommand(query, sqlcon_QOEMetrices);
        cmd.Parameters.AddWithValue("@locIP", TextBox2.Text);
        cmd.Parameters.AddWithValue("@locName", TextBox3.Text);        

        try
        {
            sqlcon_QOEMetrices.Open();

            cmd.ExecuteNonQuery();
        }
        catch (Exception)
        {
            throw;
        }
        finally
        {
            sqlcon_QOEMetrices.Close();
        }

【讨论】:

  • 我想计算与位置名称相对应的用户数,我正在编写此查询:string q = "SELECT COUNT(DISTINCT [UserURI]) FROM [UserLocation] WHERE LocationName='Powai'"; SqlCommand cmd1 = new SqlCommand(q,sqlcon_QOEMetrices); TextBox6.Text = cmd1.ExecuteScalar().ToString();但它甚至没有显示任何错误都不起作用
  • 首先,您是否已经尝试执行查询?如果它没有显示任何错误,则很可能您的查询没有返回任何结果。您可以在 Visual Studio 中连接到您的数据库并使用查询生成器 [aquafold.com/images/screenshots/… screenshot) 来构建和测试您的查询。您将看到查询是否有效。
  • 但是,您的代码不起作用,因为您忘记打开连接。 ( sqlcon_QOEMetrices.Open(); ) 但是,这肯定会引发异常。
【解决方案3】:

省略

 WHERE LocationID=null

并且更喜欢 SQLCommand 和 Parameters。不使用 UI 控件值构建字符串。

【讨论】:

    【解决方案4】:

    使用LocationID IS NULL 而不是LocationID = NULL 是的。正如其他人提到的,您的查询容易受到 SQL 注入攻击。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多