2017-02-24 51 views
0

我想在我的數據庫與下面的代碼放在一個存儲過程來執行:誤差的SqlCommand不接受參數參數

using (var connection = new SqlConnection(ConfigurationManager.ConnectionStrings["myCNN"].ConnectionString)) 
{ 
    using (var cmd = new SqlCommand("dbo.myStoredProcedure", connection)) 
    { 
     cmd.Parameters.Add("@PatientId", SqlDbType.VarChar, 40).Value = number; 
     cmd.Parameters.Add("@NickName", SqlDbType.VarChar, 20).Value = "stlukeshs";        
     var reader = cmd.ExecuteReader(); 
     while(reader.Read()) 
     { 
      //Do Stuff.. 
     } 
     //closer reader 
     reader.Close(); 
    } 
} 

然而,在執行我收到一個錯誤,指出:

在System.Data.dll中發生類型'System.Data.SqlClient.SqlException'的異常,但未在用戶代碼中處理

其他信息:過程或函數'myStoredProcedure'期望第米'@PatientId',它沒有提供。

很明顯,您看到我正在添加參數,並且我的number的值爲100,非空。所以我有點困惑,爲什麼它沒有得到我的參數參數。

+1

這顯然不是你真正的存儲過程的名稱,所以想必其他的事情可能不太會在現實代碼...你是否100%肯定這不是一個錯字? –

+0

我很驚訝它不會抱怨你沒有打開連接。 – pilotcam

+0

哦,它確實,我錯過了那行代碼..對不起! – Rinktacular

回答

1

您需要指定CommandType默認爲Text。您必須指定StoredProcedure作爲CommandType

cmd.CommandType = CommandType.StoredProcedure; 

所以,你的完整的代碼應該是:

using (var connection = new SqlConnection(ConfigurationManager.ConnectionStrings["myCNN"].ConnectionString)) 
{ 
    using (var cmd = new SqlCommand("dbo.myStoredProcedure", connection)) 
    { 
     cmd.CommandType = CommandType.StoredProcedure; 
     cmd.Parameters.Add("@PatientId", SqlDbType.VarChar, 40).Value = number; 
     cmd.Parameters.Add("@NickName", SqlDbType.VarChar, 20).Value = "stlukeshs";        
     var reader = cmd.ExecuteReader(); 
     while(reader.Read()) 
     { 
      //Do Stuff.. 
     } 
     //closer reader 
     reader.Close(); 
    } 
} 
+0

這確實解決了我的問題。我以爲這是隱含的,唉,我錯了。謝謝! – Rinktacular