Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/302.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用foreach循环的结果_C# - Fatal编程技术网

C# 使用foreach循环的结果

C# 使用foreach循环的结果,c#,C#,新到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 +

新到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();

使用参数化查询更安全。如果您使用的是using块,请确保在其末尾处理您的连接

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方法。

使用参数化查询更安全。如果您使用的是using块,请确保在其末尾处理您的连接

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方法的情况下将它们作为布尔值传递。

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

string sql = "Insert into Table (Code, v1, v2, v3) " + 
                " SELECT code, v1, v2, v3 FROM <this part resembles your original query>";

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

string sql = "Insert into Table (Code, v1, v2, v3) " + 
                " SELECT code, v1, v2, v3 FROM <this part resembles your original query>";

将“newsqlcommand”放在循环中效率低下;所有这些命令对象都将在过程的整个生命周期中存在,这可能会导致SQL Server出现问题。尝试: 1在循环外部创建SqlCommand 2再次在循环外部创建一个SQLParameter:

SqlParameter myParam = cmd.Parameters.Add("@myValue", SqlDbType.VarChar);
3在您的循环中:

myParam.Value = strValue;
cmd.ExecuteNonQuery();

将“newsqlcommand”放在循环中效率低下;所有这些命令对象都将在过程的整个生命周期中存在,这可能会导致SQL Server出现问题。尝试: 1在循环外部创建SqlCommand 2再次在循环外部创建一个SQLParameter:

SqlParameter myParam = cmd.Parameters.Add("@myValue", SqlDbType.VarChar);
3在您的循环中:

myParam.Value = strValue;
cmd.ExecuteNonQuery();


如果表中有多行,您希望发生什么?大概你想插入多行,对吧?请注意,您应该使用参数化SQL,而不是以这种方式构造SQL。无论表中有多少行,您是否只需要一个strValue?提示:在将某些值与其他字符串串联时,您不需要调用ToString。更好地用于查询中的值将有许多行。Insert命令应将所有行插入表中。如果表中有多行,您希望执行什么操作?大概你想插入多行,对吧?请注意,您应该使用参数化SQL,而不是以这种方式构造SQL。无论表中有多少行,您是否只需要一个strValue?提示:在将某些值与其他字符串串联时,您不需要调用ToString。更好地用于查询中的值将有许多行。Insert命令应该将所有行插入到表中。谢谢,我将对此进行更改。将“new SqlCommand”放入循环中效率低下;所有这些命令对象都将在整个过程中存在,这可能会在SQL Server上造成问题。Kaf,我得到错误:SqlParameterCollection只接受非空的SqlParameter类型对象,而不接受字符串对象。请立即重试,我已将cmd.Parameters.Addname更改为cmd.Parameters.Addnew SqlParametername,dataType,这应该能解决问题。确保参数数据类型与它们插入的数据库字段匹配。谢谢Kaf,你的a星!谢谢,我会改变这一点。将“newsqlcommand”放在循环中是低效的;所有这些命令对象都将在整个过程中存在,这可能会在SQL Server上造成问题。Kaf,我得到错误:SqlParameterCollection只接受非空的SqlParameter类型对象,而不接受字符串对象。请立即重试,我已将cmd.Parameters.Addname更改为cmd.Parameters.Addnew SqlParametername,dataType,这应该能解决问题。确保参数数据类型与它们插入的数据库字段匹配。谢谢Kaf,你的a星!您好,不,它源自excel工作表。您好,不,它源自excel工作表。这将创建一个新的cmd对象,并为每个代码记录添加参数,相反,我认为如果在循环之前添加这些参数,并在循环中分配值,则效率会更高。@Kaf也许您的代码效率更高一些,但我认为,和网络查询、数据库查询和服务器上的IO操作相比,这实在微不足道。将所有内容放在一个地方看起来更容易阅读me@Kaf同意,值得一提的是:这将创建一个新的cmd对象,并为每个代码记录添加参数,相反,我认为如果在循环之前添加参数,并在循环中指定值,则效率会更高。@Kaf也许您的代码效率会更高一些,但我认为,和网络查询、数据库查询和服务器上的IO操作相比,这实在微不足道。将所有内容放在一个地方看起来更容易阅读me@Kaf同意,值得一提的是: