运行 多个 sql 命令
Run multiple sqlcommands
我在执行多个 sql 命令时遇到问题。我需要多次更新数据。第一个 sql 查询关于这两种情况 if,else;但是第二个和第三个 sql 命令将相应地出现在 if 或 else 中。
问题是只有一个 sql 命令可以正常工作,那些位于循环内的命令。
public void Button_Submit_Onclick(object sender, EventArgs e)
{
for (int i = 0; i < GridView2.Rows.Count; i++)
{
con.ConnectionString = ConfigurationManager.ConnectionStrings["TestDeductionsConnectionString2"].ToString();
int recordid = Convert.ToInt32(GridView2.DataKeys[i].Values[0]);
CheckBox cbox = (CheckBox)GridView2.Rows[i].FindControl("CheckBox1");
bool private1 = Convert.ToBoolean(cbox.Checked);
SqlCommand cmd = new SqlCommand();
cmd.Connection = con;
cmd.CommandText = "Update DetailCosts set private='" + private1 + "' where recordid=" + recordid;
con.Open();
if (private1==true)
{
cmd.CommandText = "Update DetailCosts set privateCost=Costs where recordid=" + recordid;
cmd.Parameters.AddWithValue("@private1", SqlDbType.Bit).Value = private1;
cmd.Parameters.AddWithValue("@recordid", SqlDbType.Int).Value = recordid.ToString();
}
else
{
cmd.CommandText = "Update DetailCosts set privateCost=0 where recordid=" + recordid;
cmd.Parameters.AddWithValue("@recordid", SqlDbType.Int).Value = recordid.ToString();
cmd.Parameters.Add("@private1", SqlDbType.Bit).Value = private1;
}
cmd.ExecuteNonQuery();
con.Close();
}
}
您需要执行每条要执行的命令,因此您应该添加一个
cmd.ExecuteNonQuery();
在您的第一个查询之后也执行它。
如果您希望两者都被执行,而不是在一个失败时执行,您应该实施 transactions 并将两个查询包装在一个事务中。
这是一个工作代码:
public void Button_Submit_Onclick(object sender, EventArgs e)
{
for (int i = 0; i < GridView2.Rows.Count; i++)
{
con.ConnectionString = ConfigurationManager.ConnectionStrings["TestDeductionsConnectionString2"].ToString();
int recordid = Convert.ToInt32(GridView2.DataKeys[i].Values[0]);
//bool private1 = Convert.ToBoolean(GridView2.FindControl("CheckBox1"));
CheckBox cbox = (CheckBox)GridView2.Rows[i].FindControl("CheckBox1");
bool private1 = Convert.ToBoolean(cbox.Checked);
SqlCommand cmd = new SqlCommand();
cmd.Connection = con;
con.Open();
cmd.CommandText = "Update DetailCosts set private='" + private1 + "' where recordid=" + recordid;
cmd.Parameters.AddWithValue("@private1", SqlDbType.Bit).Value = private1;
cmd.Parameters.AddWithValue("@recordid", SqlDbType.Int).Value = recordid.ToString();
cmd.ExecuteNonQuery();
if (private1==true)
{
//DateTime date = DateTime.Now;
//cmd.CommandText = "Update AprovedCosts set AprovedCosts.AprovalUser = ";
cmd.CommandText = "Update DetailCosts set privateCost=Costs where recordid=" + recordid;
cmd.ExecuteNonQuery();
}
else
{
cmd.CommandText = "Update DetailCosts set privateCost=0 where recordid=" + recordid;
cmd.ExecuteNonQuery();
}
con.Close();
}
我在执行多个 sql 命令时遇到问题。我需要多次更新数据。第一个 sql 查询关于这两种情况 if,else;但是第二个和第三个 sql 命令将相应地出现在 if 或 else 中。 问题是只有一个 sql 命令可以正常工作,那些位于循环内的命令。
public void Button_Submit_Onclick(object sender, EventArgs e)
{
for (int i = 0; i < GridView2.Rows.Count; i++)
{
con.ConnectionString = ConfigurationManager.ConnectionStrings["TestDeductionsConnectionString2"].ToString();
int recordid = Convert.ToInt32(GridView2.DataKeys[i].Values[0]);
CheckBox cbox = (CheckBox)GridView2.Rows[i].FindControl("CheckBox1");
bool private1 = Convert.ToBoolean(cbox.Checked);
SqlCommand cmd = new SqlCommand();
cmd.Connection = con;
cmd.CommandText = "Update DetailCosts set private='" + private1 + "' where recordid=" + recordid;
con.Open();
if (private1==true)
{
cmd.CommandText = "Update DetailCosts set privateCost=Costs where recordid=" + recordid;
cmd.Parameters.AddWithValue("@private1", SqlDbType.Bit).Value = private1;
cmd.Parameters.AddWithValue("@recordid", SqlDbType.Int).Value = recordid.ToString();
}
else
{
cmd.CommandText = "Update DetailCosts set privateCost=0 where recordid=" + recordid;
cmd.Parameters.AddWithValue("@recordid", SqlDbType.Int).Value = recordid.ToString();
cmd.Parameters.Add("@private1", SqlDbType.Bit).Value = private1;
}
cmd.ExecuteNonQuery();
con.Close();
}
}
您需要执行每条要执行的命令,因此您应该添加一个
cmd.ExecuteNonQuery();
在您的第一个查询之后也执行它。
如果您希望两者都被执行,而不是在一个失败时执行,您应该实施 transactions 并将两个查询包装在一个事务中。
这是一个工作代码:
public void Button_Submit_Onclick(object sender, EventArgs e)
{
for (int i = 0; i < GridView2.Rows.Count; i++)
{
con.ConnectionString = ConfigurationManager.ConnectionStrings["TestDeductionsConnectionString2"].ToString();
int recordid = Convert.ToInt32(GridView2.DataKeys[i].Values[0]);
//bool private1 = Convert.ToBoolean(GridView2.FindControl("CheckBox1"));
CheckBox cbox = (CheckBox)GridView2.Rows[i].FindControl("CheckBox1");
bool private1 = Convert.ToBoolean(cbox.Checked);
SqlCommand cmd = new SqlCommand();
cmd.Connection = con;
con.Open();
cmd.CommandText = "Update DetailCosts set private='" + private1 + "' where recordid=" + recordid;
cmd.Parameters.AddWithValue("@private1", SqlDbType.Bit).Value = private1;
cmd.Parameters.AddWithValue("@recordid", SqlDbType.Int).Value = recordid.ToString();
cmd.ExecuteNonQuery();
if (private1==true)
{
//DateTime date = DateTime.Now;
//cmd.CommandText = "Update AprovedCosts set AprovedCosts.AprovalUser = ";
cmd.CommandText = "Update DetailCosts set privateCost=Costs where recordid=" + recordid;
cmd.ExecuteNonQuery();
}
else
{
cmd.CommandText = "Update DetailCosts set privateCost=0 where recordid=" + recordid;
cmd.ExecuteNonQuery();
}
con.Close();
}