2011-10-11 86 views
1

我搜索了本網站和其他網站以瞭解並排除此異常。很多答案,但我找不到「我錯了」的地方。此i中的異常:SQLException未提供參數化查詢###

的參數化查詢 '(@listenr INT,@ stregko爲nvarchar(4000))SELECT * FROMIndkøbsliste' 預計參數 '@stregko',但未提供。

而我在這裏我的代碼。

public Indkøbsliste findIndkøbslisteStregkode(string stregko, int listenr) 
    { 
     Indkøbsliste inl = new Indkøbsliste(); 



     SqlConnection myCon = DBcon.getInstance().conn(); 
     myCon.Open(); 

     string query = "SELECT * FROM Indkøbsliste WHERE Stregkode = @stregko AND ListeNr = @listenr"; 
     SqlCommand com = new SqlCommand(query, myCon); 
     com.Parameters.Add("@stregko", System.Data.SqlDbType.VarChar).Value = stregko; 
     com.Parameters.Add("@listenr", System.Data.SqlDbType.Int).Value = listenr; 
     SqlDataReader dr = com.ExecuteReader(); 
     if (dr.Read()) 
     { 

      inl.ListeNr = dr.GetInt32(1); 
      inl.Stregkode = dr.GetString(2); 
      inl.Navn = dr.GetString(3); 
      inl.Antal = dr.GetInt32(4); 
      inl.Pris = dr.GetDecimal(5); 

     } 
     myCon.Close(); 
     return inl; 
    } 

回答

2

。利用AddWithValue方法

com.Parameters.AddWithValue("@stregko", stregko); 
or 
com.Parameters.Add("@stregko", SqlDbType.NVarChar, 50).Value = stregko; 
or 
SqlParameter parameter = new SqlParameter("@stregko", SqlDbType.NVarChar, 50); 
parameter.Value = stregko; 
com.Parameters.Add(parameter); 

,而不是

com.Parameters.Add("@stregko", System.Data.SqlDbType.VarChar).Value = stregko;

+0

@Anders詹森 - yups 5分鐘後,可能是你能接受它 –

+1

@PranayRana - 不建議AddWithValue尤其是當輸入類型爲varchar /串。如果輸入超出表格字段的長度會發生什麼? – adatapost

2

SQL查詢預計,stregko一個unicode字符串,但您提供的非Unicode字符串。

嘗試改變你的C#代碼如下分配參數:

com.Parameters.Add("@stregko", System.Data.SqlDbType.NVarChar).Value = stregko; 

注意 「N」 中的NVarChar!

1

您的SQL參數是nvarchar - 嘗試在您的C#代碼中使用System.Data.SqlDbType.NVarChar

1

從您的錯誤信息,嘗試改變:

com.Parameters.Add("@stregko", System.Data.SqlDbType.VarChar) 

com.Parameters.Add("@stregko", System.Data.SqlDbType.NVarChar) 
0

您需要指定大小。

com.Parameters.Add("@stregko", System.Data.SqlDbType.NVarChar,50).Value = stregko;