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();
答案 0 :(得分:4)
使用参数化查询可以更安全。如果你使用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()方法。
答案 1 :(得分:0)
您的C#数据集很可能首先来自Sql数据库。如果是这样,最有效的方法是构建一个查询:
string sql = "Insert into Table (Code, v1, v2, v3) " +
" SELECT code, v1, v2, v3 FROM <this part resembles your original query>";
答案 2 :(得分: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 });
答案 3 :(得分:0)
将'new SqlCommand'置于循环中是效率低下的;所有这些命令对象将在整个过程的生命周期中存在,这可能会导致SQL Server出现问题。试试:
(1)在循环外创建SqlCommand
(2)再次在循环外创建一个SQLParameter:
SqlParameter myParam = cmd.Parameters.Add("@myValue", SqlDbType.VarChar);
(3)在你的循环中:
myParam.Value = strValue;
cmd.ExecuteNonQuery();