2017-01-09 71 views
1

我想将UserId的返回值从sql查询存储到Usersid变量。但我无法获取该值.FYI UserName是文本。想要在c中存储sql select语句的返回值#

int usersid; 
using (SqlConnection connection = new SqlConnection(ConfigurationManager.ConnectionStrings["AzureSql"].ToString())) 
using (SqlCommand command = new SqlCommand()) 
{ 
    connection.Open(); 
    command.CommandText = @"Select UserId from [dbo].[User] where username= @username"; 

    command.Parameters.Clear(); 

    command.Parameters.AddWithValue("@username", currentUser.UserName); 
    usersid = (int)command.ExecuteScalar(); 

    command.CommandText = @"INSERT INTO [dbo].[ClientEmailConfirmation] ([JobNumber],[OrderNumber],[UserId]) VALUES 
                (@JobNumber,@OrderNumber,@UserId)"; 
    command.Parameters.Clear(); 
    command.Parameters.AddWithValue("@JobNumber", JobNumberTextBox.Text); 
    command.Parameters.AddWithValue("@OrderNumber", OrderNumberTextBox.Text); 
    command.Parameters.AddWithValue("@UserId", usersid); 
    command.ExecuteNonQuery(); 

} 

我将不胜感激您的帮助 谢谢, 一个

+0

这中回答:[?得到插入行的身份最好的办法(http://stackoverflow.com/questions/42648/best-way-to-get-identity-of-inserted-row )和[执行插入命令并返回插入的Id在Sql](http://stackoverflow.com/questions/18373461/execute-insert-command-and-return-inserted-id-in-sql) – Adrian

+0

此问题已答复[获取插入行的身份的最佳方式?](http://stackoverflow.com/questions/42648/best-way-to-get-identity-of-inserted-row)和[执行插入命令并返回插入的ID Sql](http://stackoverflow.com/questions/18373461/execute-insert-command-and-return-inserted-id-in-sql) – Adrian

回答

1
using (SqlCommand command = new SqlCommand()) 
{ 
    command.Connection = connection; 
    ... 
+0

我不明白这是如何回答这个问题。这如何帮助海报获得他们询问的'UserId'? – catfood

+0

@catfood - 它有助于'command.ExecuteScalar();'执行时没有错误。 – Igor

+0

啊。我错过了那部分。好。你的答案给出了解决方案的一部分,Mmcgowa3提供了其余部分。 – catfood

-1

转换标量结果诠释:

  int userId = Convert.ToInt32(command.ExecuteScalar())); 
+0

很抱歉更新了我的答案。 – Mike

0

前言:我回答将二者结合起来以前的答案,并提供一些最佳实践。

您的原始代码示例缺少连接(双打)SqlConnectionSqlCommand的棋子。你需要下面的代码片段:

using (SqlConnection connection = new SqlConnection(ConfigurationManager.ConnectionStrings["AzureSql"].ToString())) 
using (SqlCommand command = new SqlCommand()) 
{ 
    connection.Open(); 
    command.Connection = connection; 
    // Rest of code here. 
} 

我宁愿分配一个空的命令文本亲自在的SqlCommand的构造函数的连接。它始终确保将连接分配给SqlCommand。更多的阅读可以发现here on MSDN

using (SqlConnection connection = new SqlConnection(ConfigurationManager.ConnectionStrings["AzureSql"].ToString())) 
using (SqlCommand command = new SqlCommand("", connection)) 
{ 
    // Do note that you still have to open the connection here. 
    connection.Open(); 
    // Rest of code here. 
} 

假设您的UserId列是整数类型,那么施放结果应该没问题。

usersid = (int)command.ExecuteScalar(); 

你应该实例化自己的SqlParameter实例,而不是使用AddWithValue()方法关闭SqlParameterCollection。如果您有数据类型冲突的机会,AddWithValue可能会导致错误的类型导致几个难以诊断问题。如需进一步阅读,请查看articleMSDN

command.Parameters.Add(new SqlParameter("@username", SqlDbType.VarChar) { Value = currentUser.UserName });