我正在运行的SQL命令运行良好但是对于其中一个AddWithValue参数我想使用另一个SQL命令来获取该值...这就是我所拥有的但是我想要使用的cmd2不是工作。是否有可能以理论上的方式获取数据它是有意义的但它似乎不起作用..
cmd2 = new SqlCommand("SELECT acctNum FROM custInfo WHERE customerName = @customerName", cn);
cmd2.Parameters.AddWithValue("@customerName", customerDropDown.Text);
cmd = new SqlCommand("UPDATE custInfo SET ctGal = (ctGal - (@contractGallons)) WHERE acctNum = @acctNum", cn);
cmd.Parameters.AddWithValue("@contractGallons", gallonsTextBox.Text)
cmd.Parameters.AddWithValue("@acctNum", cmd2);
答案 0 :(得分:2)
我建议将两个查询合并为一个:
//DONE: let keep query readable
string sql =
@"UPDATE custInfo
SET ctGal = (ctGal - (@contractGallons))
WHERE acctNum IN (SELECT c.acctNum
FROM custInfo c
WHERE c.customerName = @customerName)";
//DONE: wrap IDisposable into using
using (var cmd = new SqlCommand(sql, cn)) {
//TODO: get rid of AddWithValue, but specify the actual fields' types
cmd.Parameters.AddWithValue("@contractGallons", gallonsTextBox.Text);
cmd.Parameters.AddWithValue("@customerName", customerDropDown.Text);
cmd.ExecuteNonQuery();
}
答案 1 :(得分:1)
如果你想走这条路,你有两个选择:
可能更好的方法是将两个查询重写为一个连接的查询。
答案 2 :(得分:0)
您必须使用cmd2.ExecuteReader()
来获取 acctNum ,例如
您可以尝试以下代码
using (SqlDataReader reader = cmd2.ExecuteReader())
{
if (reader.Read())
{
cmd = new SqlCommand(@"UPDATE custInfo SET ctGal = (ctGal -
(@contractGallons)) WHERE acctNum = @acctNum", cn);
cmd.Parameters.AddWithValue("@contractGallons", gallonsTextBox.Text)
cmd.Parameters.AddWithValue("@acctNum", reader["acctNum"]);
}
}
希望这会有所帮助..