2016-11-19 82 views
4

我在將參數傳遞給SqlCommand的SQL字符串時遇到問題。當我使用選項1(見下文)時,代碼起作用。當我使用選項2時,它不起作用。我不知道如何讓.AddWithValue方法與SqlCommand一起使用。將參數傳遞給SqlCommand的問題

任何幫助,將不勝感激!

private string [] GetOrderInfo (string folder) 
{ 
    string [] order = new string [] { "date", "order#", "storeid", "storename", "username" }; 

    using (SqlConnection conn = new SqlConnection (_connectionString)) 
    { 
     conn.Open(); 

     // Option 1: this line works. 
     //string sql = "select * from OrderProduct where OrderProductID=26846"; 

     // Option 2: this line doesn't work. 
     string sql = "select * from OrderProduct where [email protected];"; 

     using (SqlCommand command = new SqlCommand (sql, conn)) 
     { 
      command.Parameters.AddWithValue ("@folder", folder); 

      using (SqlDataReader reader = command.ExecuteReader()) 
      { 
       while (reader.Read()) 
        order [1] = Convert.ToString (reader.GetInt32 (1)); 
      } 
     } 

     conn.Close(); 
    } // using (SqlConnection conn = new SqlConnection (connectionString)) 

    return order; 
} 
+0

在「選項1」你要指定的東西,實際上看起來像一個產品ID:26846.在「選項2」,你分配一個名爲'folder'字符串。這似乎沒有道理...... –

+0

「它不起作用」的意思是準確的。 – JBrooks

+0

該文件夾和OrderProductID是相同的東西。 OrderProductID是數據庫表中的字段名稱,也是爲訂單創建的文件夾的名稱。我沒有這樣設置它,它是由構建該應用程序的公司完成的。 – UltraJ

回答

3

嘗試使用

Command.Parameters.Add("@folder",SqlDbType.Varchar).Value = folder; 
0

你可以嘗試使用:

using (SqlCommand command = new SqlCommand("select * from OrderProduct where [email protected]", conn)) 
{ 
    command.Parameters.Add(new SqlParameter("@folder", folder)); 

    using (SqlDataReader reader = command.ExecuteReader()) 
    { 
     while (reader.Read()) 
      order[1] = Convert.ToString(reader.GetInt32(1)); 
    } 
} 
+0

你從哪裏看到它被棄用?這裏沒有提及:https://msdn.microsoft.com/en-us/library/0881fz2y(v=vs.110).aspx – Yanga

1

AddWithValue方法使用的值的類型定義正確SqlDbType。因此,如果您的字段OrderProductIDINT的類型,則需要添加int

樣品:

command.Parameters.AddWithValue ("@folder", 26846); 

另一個簡單的方法是使用簡單對象映射像SqlDatabaseCommandDapper

using (var cmd = new SqlDatabaseCommand(_connection)) 
{ 
    cmd.CommandText.AppendLine(" SELECT * ") 
        .AppendLine(" FROM EMP ") 
        .AppendLine(" WHERE EMPNO = @EmpNo ") 
        .AppendLine(" AND HIREDATE = @HireDate "); 

    cmd.Parameters.AddValues(new 
      { 
       EmpNo = 7369, 
       HireDate = new DateTime(1980, 12, 17) 
      }); 

    var emps = cmd.ExecuteTable<Employee>(); 
}