C# 我有一个列表视图,其中包含要插入SQL Server数据库的项

C# 我有一个列表视图,其中包含要插入SQL Server数据库的项,c#,C#,我想将listview的内容保存到SQL Server数据库中 我尝试了注释过的代码,但出现了一个错误 必须声明标量变量@Description 代码: 欢迎来到Stackoverflow, 首先,我不建议在foreach中创建一个新连接来向表中添加项。 以下是我建议使用的替代方法: try { string connectionString = ConfigurationSettings.AppSettings["conn"]; using (SqlConnection con

我想将listview的内容保存到SQL Server数据库中

我尝试了注释过的代码,但出现了一个错误

必须声明标量变量@Description

代码:

欢迎来到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);
}
(或者至少这会让你走上正确的道路。)

欢迎来到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