SQL查询结果为C#Variable

时间:2018-04-17 21:17:53

标签: c# sql sql-server

我正在尝试从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();

1 个答案:

答案 0 :(得分:2)

如果您想将@DataID提取回来电话,则有3个选项:

  • 声明output参数...大概只是将@DataID移动为output参数而不是局部变量;添加一个额外的参数并指定ParameterDirection.Output的方向;在ExecuteNonQuery之后,读出值
  • 在现有SQL的末尾,return @DataID;添加一个额外的参数并指定ParameterDirection.ReturnValue的方向;在ExecuteNonQuery之后,读出值
  • 在现有SQL的末尾,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();