2013-03-30 63 views
1

我想運行一個命令將行插入到我的SQL Server 2012數據庫中,但是我的參數沒有傳遞給代碼。在SqlCommand上傳遞參數不起作用

con.Open(); 

string query = @"INSERT INTO [dbo].[Users](Username, Password, Role) 
       VALUES (@u, @p, @r);"; 
var cmd = new SqlCommand(query, con); 

cmd.Parameters.AddWithValue("@u", username); 
cmd.Parameters.AddWithValue("@p", password); 
cmd.Parameters.AddWithValue("@r", role); 

cmd.ExecuteNonQuery(); 

con.Close(); 

我得到SqlException與參數化查詢

'(@u nvarchar的(4000),@表示P爲nvarchar(4000),5 R爲nvarchar(1))INSERT INTO' 預計參數' @u',沒有提供。

我看到它的方式是在執行命令之前傳遞參數。任何人都可以幫助我找出缺少的東西嗎?

回答

1

您的問題不是因爲您的查詢,這是因爲變量用戶名爲NULL。當你的變量username爲null時,當你使用.AddwithValue時它不會引發任何錯誤,但是它不會設置參數,這就是爲什麼當你使用該參數時,它返回了你的異常,說沒有提供該參數。
使用下面的代碼,您可以重現您的問題並驗證原因。如果你給username = string.Empty,它不會給你這個問題。


string connStr = "Data Source=localhost;Initial Catalog=Adventure;Integrated Security=SSPI"; 
      SqlConnection con = new SqlConnection(connStr); 
      string username = null; 
      string password = string.Empty; 
      string role = string.Empty; 
      try 
      { 
       con.Open(); 
       string query = @"INSERT INTO [dbo].[Users]" + @"(Username ,Password , Role) " + @"VALUES (@u,@p,@r);"; 
       var cmd = new SqlCommand(query, con); 
       cmd.Parameters.AddWithValue("@u", username); 
       cmd.Parameters.AddWithValue("@p", password); 
       cmd.Parameters.AddWithValue("@r", role); 
       cmd.ExecuteNonQuery(); 
       con.Close(); 
      } 
      catch (Exception ex) 
      { 
       Console.WriteLine(ex.StackTrace + ex.Message); 
       con.Close(); 
      } 
相關問題