C# 我有一个列表视图,其中包含要插入SQL Server数据库的项
我想将listview的内容保存到SQL Server数据库中 我尝试了注释过的代码,但出现了一个错误 必须声明标量变量@Description 代码: 欢迎来到Stackoverflow, 首先,我不建议在foreach中创建一个新连接来向表中添加项。 以下是我建议使用的替代方法:C# 我有一个列表视图,其中包含要插入SQL Server数据库的项,c#,C#,我想将listview的内容保存到SQL Server数据库中 我尝试了注释过的代码,但出现了一个错误 必须声明标量变量@Description 代码: 欢迎来到Stackoverflow, 首先,我不建议在foreach中创建一个新连接来向表中添加项。 以下是我建议使用的替代方法: try { string connectionString = ConfigurationSettings.AppSettings["conn"]; using (SqlConnection con
try
{
string connectionString = ConfigurationSettings.AppSettings["conn"];
using (SqlConnection conn = new SqlConnection(connectionString))
{
SqlCommand cmd;
conn.Open();
string cmdString = @"INSERT INTO Region (RegionDescription, Fname, Lname)
VALUES (@RegionDescription, @Fname, @Lname)";
foreach (ListViewItem item in lvregion.Items)
{
cmd = new SqlCommand(cmdString, conn);
cmd.Parameters.Add("@RegionDescription", SqlDbType.VarChar, 40).Value = item.Text.Trim();
cmd.Parameters.Add("@Fname", SqlDbType.VarChar, 40).Value = item.SubItems[1].Text.Trim();
cmd.Parameters.Add("@Lname", SqlDbType.VarChar, 40).Value = item.SubItems[2].Text.Trim();
cmd.ExecuteNonQuery();
}
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
(或者至少这会让你走上正确的道路。)欢迎来到Stackoverflow,
首先,我不建议在foreach中创建一个新连接来向表中添加项。
以下是我建议使用的替代方法:
try
{
string connectionString = ConfigurationSettings.AppSettings["conn"];
using (SqlConnection conn = new SqlConnection(connectionString))
{
SqlCommand cmd;
conn.Open();
string cmdString = @"INSERT INTO Region (RegionDescription, Fname, Lname)
VALUES (@RegionDescription, @Fname, @Lname)";
foreach (ListViewItem item in lvregion.Items)
{
cmd = new SqlCommand(cmdString, conn);
cmd.Parameters.Add("@RegionDescription", SqlDbType.VarChar, 40).Value = item.Text.Trim();
cmd.Parameters.Add("@Fname", SqlDbType.VarChar, 40).Value = item.SubItems[1].Text.Trim();
cmd.Parameters.Add("@Lname", SqlDbType.VarChar, 40).Value = item.SubItems[2].Text.Trim();
cmd.ExecuteNonQuery();
}
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
(或者至少这应该让您走上正确的道路。)不要使用
cmd.Parameters.Add
和cmd.Parameters.AddWithValue
,使用cmd.Parameters.Add(“RegionDescription”,SqlDbType.VarChar,40)。Value=item.Text.Trim()
您有cmd
可以添加所有参数,但也有comm
可以定义SQL查询并执行,您需要使用一个SqlCommand
变量,将SQL查询分配给它,将参数添加到它,然后执行它……不要使用cmd.Parameters.Add
和cmd.Parameters.AddWithValue
,使用cmd.Parameters.Add(“RegionDescription”,SqlDbType.VarChar,40)。Value=item.Text.Trim()
您有添加所有参数的cmd
,但您也有定义SQL查询并执行的comm
,您需要使用一个SqlCommand
变量,将SQL查询分配给它,将参数添加到它,然后使用(SqlConnection conn=new SqlConnection(connectionString))不创建新连接是怎么回事???另外,AddWithValue()
应该避免使用Add()
@MakeStackOverflowGood。我想你可能误读了我的评论(虽然措辞含糊不清),我没有说“不创建新连接”但不要像在原始代码中那样在foreach循环中创建新连接。对于AddWithValue()
,这是正确的,因为这将隐式转换使用nvarchar传递的值。我将在一秒钟内编辑我的响应。将所有listitems添加到datatable,并使用适配器更新datatable(SqlConnection conn=new SqlConnection(connectionString))
不创建新连接是怎么回事???另外,AddWithValue()
应该避免使用Add()
@MakeStackOverflowGood。我想你可能误读了我的评论(虽然措辞含糊不清),我没有说“不创建新连接”但是不要像在原始代码中那样在foreach循环中创建新连接。对于AddWithValue()
,这是正确的,因为这将隐式转换使用nvarchar传递的值。我将在一秒钟内编辑我的响应。将所有listitems添加到datatable,并使用适配器更新datatable