我需要通读表中的所有记录,对于每个记录,如果满足特定条件,请在该记录上设置一个值为true或false的标志。发生的事情是我的方法为每条记录插入true。
如何根据条件使方法插入true或false?
例如,如果我在Code
列中的值为11,则在该记录的Flag
列中插入true,但如果Code
列的值为7然后插入false。
查询:
string select = "SELECT * FROM Movies";
读取记录的方法:
using (SqlDataReader sdr = cmd.ExecuteReader())
{
while (sdr.Read())
{
if (string.IsNullOrEmpty(sdr["Code"].ToString()))
{
C_E = "0";
this.Update(C_E);
//ViewBag.Message = "cero";
}
else
{
C_E = sdr["Code"].ToString();
this.Update(C_E);
// ViewBag.Message = C_E;
}
}
}
更新表的方法:
private string Update(string C_E)
{
ReglaController re = new ReglaController();
string query = "UPDATE Movies SET Flag = @code";
string constr = ConfigurationManager.ConnectionStrings["Constring"].ConnectionString;
using (SqlConnection con = new SqlConnection(constr))
{
SqlCommand command = new SqlCommand(query, con);
//command.Parameters.Add("@code", SqlDbType.NChar).Value = ("o");
command.Parameters.Add("@code", SqlDbType.NChar).Value = re.Condition(C_E);
con.Open();
command.ExecuteNonQuery();
}
return C_E;
}
测试条件的方法:
public string Regla_4(string C_E)
{
string query = "SELECT Emp.Code FROM Empresas WHERE Emp.Code = @codigo";
string R2 = "l";
string constr = ConfigurationManager.ConnectionStrings["Constring"].ConnectionString;
using (SqlConnection con = new SqlConnection(constr))
{
SqlCommand command = new SqlCommand(query, con);
command.Parameters.Add("@codigo", SqlDbType.Int).Value = C_E;
con.Open();
command.ExecuteNonQuery();
using (SqlDataReader sdr = command.ExecuteReader())
{
if (sdr.HasRows)
{
R2 = "True";
}
else
{
R2 = "False";
}
}
}
}
答案 0 :(得分:5)
问题在于更新查询不会告诉数据库要更新哪一行,因此它会更新整个表。您需要通过包含WHERE子句来告知要更新的行。
答案 1 :(得分:0)
您需要编写如下所示的更新语句
string query = "UPDATE Movies SET Flag = CASE WHEN Code = 11 then true case when Code = 7 then false end";
希望这对您有帮助