2011-01-12 45 views
1

沒有更新我的代碼:參數在SQL語句

string query = "select count(*) 
        from MODEL m 
        join KOLEKCJA ko on m.SEZON = ko.sezon 
      left join PRODUCENCI p on p.PRODUCENT_ID = m.PRODUCENT_ID 
      left join KRAJ k on k.KOD = m.KRAJ_POCH 
       where ko.SEZON like :ko.SEZON 
        and m.DO_PRODUKCJI like :m.DO_PRODUKCJI 
        and k.KOD like :KOD 
        and p.PRODUCENT_ID like :PRODUCENT_ID 
        and m.MODEL_ID like :MODEL_ID"; 

OdbcCommand comm = new OdbcCommand(); 
comm.Connection = con; 
comm.CommandText = query; 
comm.CommandType = CommandType.Text; 
comm.Parameters.AddWithValue("ko.SEZON", sezon); 
comm.Parameters.AddWithValue("m.DO_PRODUKCJI", do_produkcji); 
comm.Parameters.AddWithValue("KOD", kraj); 
comm.Parameters.AddWithValue("PRODUCENT_ID", fabryka); 
comm.Parameters.AddWithValue("MODEL_ID", model); 

result = (int)comm.ExecuteScalar(); 

,總是有錯誤參數不會改變;/ 什麼我錯了嗎?

+1

參數沒有改變?你什麼意思? – 2011-01-12 15:33:47

+1

閱讀越容易,幫助就越容易。 – 2011-01-12 15:37:12

回答

2

ODBC連接不指定的佔位符的工作。 ODBC使用由問號(?)標記的位置參數。用問號替換綁定變量,並確保按照正確的順序添加參數。您傳遞給AddWithValue()的參數名稱可以是任何內容。像這樣:

string query = "select count(*) 
        from MODEL m 
        join KOLEKCJA ko on m.SEZON = ko.sezon 
      left join PRODUCENCI p on p.PRODUCENT_ID = m.PRODUCENT_ID 
      left join KRAJ k on k.KOD = m.KRAJ_POCH 
       where ko.SEZON  like ? 
        and m.DO_PRODUKCJI like ? 
        and k.KOD   like ? 
        and p.PRODUCENT_ID like ? 
        and m.MODEL_ID  like ?"; 

OdbcCommand comm = new OdbcCommand(); 
comm.Connection = con; 
comm.CommandText = query; 
comm.CommandType = CommandType.Text; 
comm.Parameters.AddWithValue("ko.SEZON", sezon); 
comm.Parameters.AddWithValue("m.DO_PRODUKCJI", do_produkcji); 
comm.Parameters.AddWithValue("KOD", kraj); 
comm.Parameters.AddWithValue("PRODUCENT_ID", fabryka); 
comm.Parameters.AddWithValue("MODEL_ID", model); 

result = (int)comm.ExecuteScalar(); 
1

你是肯定你可以有一個名稱爲「ko.SEZON」的參數,即帶有「。」。在名字裏?嘗試刪除該「。」從這兩個名稱的查詢(查詢和「AddWithValue」)。

+0

不好意思幫助我 – netmajor 2011-01-14 08:11:32

4

您需要使用佔位符來讓AddWithValue工作。下面是一個例子的摘錄MSDN:像其他的連接類型做

private static void UpdateDemographics(Int32 customerID, 
    string demoXml, string connectionString) 
{ 
    // Update the demographics for a store, which is stored 
    // in an xml column. 
    string commandText = "UPDATE Sales.Store SET Demographics = @demographics " 
     + "WHERE CustomerID = @ID;"; 

    using (SqlConnection connection = new SqlConnection(connectionString)) 
    { 
     SqlCommand command = new SqlCommand(commandText, connection); 
     command.Parameters.Add("@ID", SqlDbType.Int); 
     command.Parameters["@ID"].Value = customerID; 

     // Use AddWithValue to assign Demographics. 
     // SQL Server will implicitly convert strings into XML. 
     command.Parameters.AddWithValue("@demographics", demoXml); 

     try 
     { 
      connection.Open(); 
      Int32 rowsAffected = command.ExecuteNonQuery(); 
      Console.WriteLine("RowsAffected: {0}", rowsAffected); 
     } 
     catch (Exception ex) 
     { 
      Console.WriteLine(ex.Message); 
     } 
    } 
}