0

c# 新手。如何使用 foreach 循环的结果。我想将结果插入我的数据表中。

为要插入的列命名

foreach (DataRow row in objDataset1.Tables[0].Rows)
{
    string strValue = row["code"].ToString();        
}

sc.Open();
cmd = new SqlCommand("Insert into Table (Code, v1, v2, v3) values('" + strValue + "','" + ckv1.IsChecked.ToString() + "','" + ckv2.IsChecked.ToString() + "', '" + txtv3.Text + "')", sc);
cmd.ExecuteNonQuery();
4

4 回答 4

4

使用参数化查询会更安全。如果你使用 a using block,那将确保在它结束时处理你的连接。

using(SqlConnection sc = new SqlConnection("yourConnectionString"))
{

   cmd = new SqlCommand("Insert into [tbl] (Code, v1, v2, v3) Values(@code, @v1, @v2, @v3)", sc);

   cmd.Parameters.Add(new SqlParameter("@code", SqlDbType.VarChar));
   cmd.Parameters.Add(new SqlParameter("@v1", SqlDbType.Bit));
   cmd.Parameters.Add(new SqlParameter("@v2", SqlDbType.Bit));
   cmd.Parameters.Add(new SqlParameter("@v3", SqlDbType.Bit));
   sc.Open();

   foreach (DataRow row in objDataset1.Tables[0].Rows)
   {

        //Assign the values for above parameters here.
        cmd.Parameters["@code"].Value = row["code"].ToString();
        cmd.Parameters["@v1"].Value = valueForV1;
        cmd.Parameters["@v2"].Value = valueForV2;
        cmd.Parameters["@v3"].Value = valueForV3;

        //Execute the command
        cmd.ExecuteNonQuery(); 
   }
}

注意:如果 v1、v2 和 v3 是数据库中的位字段,则应将它们作为布尔值传递,而不使用 .ToString() 方法。

于 2013-10-02T16:02:19.613 回答
0

将“new SqlCommand”放入循环中效率低下;所有这些命令对象都将存在于过程的整个生命周期中,这可能会导致 SQL Server 出现问题。尝试:

(1)在循环外创建您的 SqlCommand
(2)再次在循环外创建一个 SQLParameter:

SqlParameter myParam = cmd.Parameters.Add("@myValue", SqlDbType.VarChar);

(3) 在你的循环中:

myParam.Value = strValue;
cmd.ExecuteNonQuery();
于 2013-10-02T16:11:01.137 回答
0

您的 C# 数据集很可能首先来自 Sql 数据库。如果是这样,最有效的方法是构建单个查询:

string sql = "Insert into Table (Code, v1, v2, v3) " + 
                " SELECT code, v1, v2, v3 FROM <this part resembles your original query>";
于 2013-10-02T16:05:29.360 回答
0
var codes = objDataset1.Tables[0].AsEnumerable()
                       .Select(r => r.Field<string>("code"));

if (!code.Any())
    return;


var sql = "INSERT INTO Table (Code, v1, v2, v3) VALUES (@code, @v1, @v2, @v3)";
sc.Open();

foreach(var code in codes)
{        
    cmd = new SqlCommand(sql, sc);
    cmd.Parameters.AddWithValue("@code", code);
    cmd.Parameters.AddWithValue("@v1", ckv1.IsChecked);
    cmd.Parameters.AddWithValue("@v2", ckv2.IsChecked);
    cmd.Parameters.AddWithValue("@v3", txtv3.Text);
    cmd.ExecuteNonQuery();
}

还可以考虑使用Dapper来创建命令并自动为其添加参数:

var v1 = ckv1.IsChecked;
var v2 = ckv2.IsChecked;
var v3 = txtv3.Text;

foreach(var code in codes)
    sc.Execute(sql, new { code, v1, v2, v3 });
于 2013-10-02T16:08:06.467 回答