gpt4 book ai didi

c# - DataTable与Sql server之间的数据传输

转载 作者:太空宇宙 更新时间:2023-11-03 11:58:57 25 4
gpt4 key购买 nike

我有一个用 DataTable 实现的数据表。任务是将每个单元格的数据传递给 Sql Server 表。我正在尝试使用以下代码实现此功能:

Task AddToDB = Task.Run(() =>
{
for (int i = 0; i < DataTableView.Rows.Count; i++)
{
for (int j = 0; j < DataTableView.Columns.Count - 1; j++)
{

try
{
sqlCommand.CommandText = @"INSERT INTO TestTable VALUES (@Value1, @Value2, @Value3)";
sqlCommand.Connection = sqlConnection;
//sqlCommand.Parameters.AddWithValue("@Value1", DataTableView.Rows[i][j]);
sqlCommand.Parameters.AddWithValue("@Value2", DataTableView.Rows[i][j]);
sqlCommand.Parameters.AddWithValue("@Value3", DataTableView.Rows[i][j]);
sqlConnection.Open();
sqlCommand.ExecuteNonQuery();
sqlConnection.Close();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Error");
}
}
}

});

return AddToDB;

错误是在第一次迭代后我得到一个错误:变量名“@Value1”已经声明。变量名称在查询批处理或存储过程中必须是唯一的。

我试着仔细研究了这个答案 The variable name '@' has already been declared. Variable names must be unique within a query batch or stored procedure. in c# 并添加一行

sqlCommand.Parameters.Clear();

但最后我又报错了

Cannot insert the value NULL into column 'Value'

变量的值清零,在数据库设置中指定单元格的值不能为空。如何绕过这些限制并将数据写入数据库?

最佳答案

您需要在 for 循环内重新初始化 sqlCommand.Parameters。当前的问题是该特定命令的参数数组 (sqlCommand.Parameters) 在第二次迭代时获得了重复的参数名称,因为它仍然具有之前的参数名称。

您链接的解决方案应该足够了。只需在设置之前立即清除参数:

for (int j = 0; j < DataTableView.Columns.Count - 1; j++)
{

try
{
sqlCommand.CommandText = @"INSERT INTO TestTable VALUES (@Value1, @Value2, @Value3)";
sqlCommand.Connection = sqlConnection;

sqlCommand.Parameters.Clear();
sqlCommand.Parameters.AddWithValue("@Value1", DataTableView.Rows[i][j]);
sqlCommand.Parameters.AddWithValue("@Value2", DataTableView.Rows[i][j]);
sqlCommand.Parameters.AddWithValue("@Value3", DataTableView.Rows[i][j]);

sqlConnection.Open();
sqlCommand.ExecuteNonQuery();
sqlConnection.Close();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Error");
}
}

还要确保在 INSERT 语句中添加 TestTable 列名称和正确的顺序:

sqlCommand.CommandText = @"INSERT INTO TestTable (Column1, Column2, Column3)  VALUES (@Value1, @Value2, @Value3)";

关于c# - DataTable与Sql server之间的数据传输,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58009348/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com