【问题标题】:Adding unknown count of values inside a SELECT statement在 SELECT 语句中添加未知数量的值
【发布时间】:2021-01-19 10:44:54
【问题描述】:

我有在 SQL 表中添加值的代码:

SqlCommand command;
SqlDataAdapter adapter = new SqlDataAdapter();
String strSQL = "";

strSQL = "INSERT INTO tblTest (value1) VALUES ('" + strPLCData + "')";
   
command = new SqlCommand(strSQL, cnn);
adapter.InsertCommand = new SqlCommand(strSQL, cnn);

try
{
    int rows = adapter.InsertCommand.ExecuteNonQuery();

    txtStatusLogging.Text += "Inserted " + rows + " row(s) in the database." + Environment.NewLine;
}
catch (Exception ex)
{
    MessageBox.Show("Failed to write to database : " + ex.Message);
}
command.Dispose();

但是当我想在数据库中添加未知数量的值时(根据未知大小的列表),我有点卡住了。

例如有时只添加 value1,其他时候添加 value1、value2 和 value3 ....(取决于某个列表中的内容)。

我该怎么做呢?

【问题讨论】:

  • 我会说最好的解决方案取决于你的情况。这里有一些实用的解决方案: 1/ 最明显的解决方案是添加一个包含键/值对列的子表。 2/ 另一个常见的解决方案是在您的表中添加一个 XML 或 Json 列,其中包含您想要的所有值。 3/ 如果您对 DB 类型不严格,您可能会寻找文档数据库。
  • 你好,你能详细说明解决方案1和2吗?解决方案 3 不是一个选项,因为它将是一个 SQL 数据库。
  • SQL Injection alert - 您应该将您的 SQL 语句连接在一起 - 使用 参数化查询 来避免 SQL 注入 - 查看Little Bobby Tables

标签: c# sql-server


【解决方案1】:

绝对不需要SqlDataAdapter。如果您想向表中添加任意数量的值 - 直接使用 INSERT SqlCommand 并遍历要插入的值列表。

另外:您应该始终使用 参数化查询 - 没有例外 - 您应该将 SqlConnectionSqlCommand 对象放在 using () { ... } 块中 - 类似于这个:

类似这样的:

public void InsertValues(List<int> values)
{
    // define the insert query
    string qryInsert = "INSERT INTO dbo.tblTest (value1) VALUES (@singleValue);";
    
    using (SqlConnection conn = new SqlConnection(connectionString))
    using (SqlCommand cmdInsert = new SqlCommand(qryInsert, conn))
    {
        // define parameter
        cmdInsert.Parameter.Add("@singleValue", SqlDbType.Int);
        
        conn.Open();
        
        // loop over values
        foreach (int aValue in values)
        {
            // set the parameter value, execute query
            cmdInsert.Parameters["@singleValue"].Value = aValue;
            cmdInsert.ExecuteNonQuery();
        }
        
        conn.Close;
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-09-17
    • 1970-01-01
    • 1970-01-01
    • 2010-10-15
    • 2021-02-08
    • 2012-10-14
    • 2020-10-15
    • 2020-10-21
    相关资源
    最近更新 更多