2011-01-12 82 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); 
     } 
    } 
}