我正在尝试从C#中的SQL变量中提取数据,以便在另一个SQL查询中使用。
基本上我有一个正在运行数据网格的for循环,并将数据插入到我需要在下面的查询中链接到@DataID的表中。因为它是在一个不同的查询中我无法访问它所以我想把它拉出来变种。
最好的方法是什么?已经搜索了很多选项而没有提出任何有效的方法
感谢您的帮助!
干杯
string dartBoxQuery = @"DECLARE @DataID int;
INSERT INTO DartBox (DartBoxNumber, ReturnDate, Comments)
VALUES (@dbn, @rtndate, @cmmts)
SELECT @DataID = scope_identity();";
// set up the command before exec
SqlCommand cmd = new SqlCommand(dartBoxQuery, con);
//set parameters
cmd.Parameters.AddWithValue("@rtndate", dateTimePicker1.Text);
cmd.Parameters.AddWithValue("@dbn", textBox1.Text);
cmd.Parameters.AddWithValue("@cmmts", textBox2.Text);
// call SQL connection
con.Open();
// execute above query
cmd.ExecuteNonQuery();
//close connection
con.Close();
答案 0 :(得分:2)
如果您想将@DataID
提取回来电话,则有3个选项:
output
参数...大概只是将@DataID
移动为output
参数而不是局部变量;添加一个额外的参数并指定ParameterDirection.Output
的方向;在ExecuteNonQuery
之后,读出值return @DataID
;添加一个额外的参数并指定ParameterDirection.ReturnValue
的方向;在ExecuteNonQuery
之后,读出值select @DataID
;使用ExecuteScalar
并读出返回值在这种情况下,ExecuteScalar
可能是最简单的选择:
string dartBoxQuery = @"DECLARE @DataID int;
INSERT INTO DartBox (DartBoxNumber, ReturnDate, Comments)
VALUES (@dbn, @rtndate, @cmmts)
SELECT @DataID = scope_identity();
SELECT @DataID";
// set up the command before exec
SqlCommand cmd = new SqlCommand(dartBoxQuery, con);
//set parameters
cmd.Parameters.AddWithValue("@rtndate", dateTimePicker1.Text);
cmd.Parameters.AddWithValue("@dbn", textBox1.Text);
cmd.Parameters.AddWithValue("@cmmts", textBox2.Text);
// call SQL connection
con.Open();
// execute above query
var dataId = Convert.ToInt32(cmd.ExecuteScalar());
//close connection
con.Close();