2011-08-17 22 views
5

手冊說,ExecuteScalar方法應該像使用:如何創建數組的DbParameter []

public T ExecuteScalar<T>( 
    string commandText, 
    CommandType commandType, 
    params DbParameter[] parameters 
) 

但是我怎麼創建的參數數組?我需要提供我的存儲過程2個參數。

+0

你能提供一個鏈接到該手冊? [DbCommand.ExecuteScalar](http://msdn.microsoft.com/en-us/library/system.data.common.dbcommand.executescalar.aspx)沒有參數。 – dtb

回答

8
  • 的DbParameter是一個抽象類。
  • 由於無法根據用法推斷出類型T,因此必須指定它。
  • 儘管您可以在不創建數組的情況下傳遞可變數量的參數,但如果您要動態創建可變數量的參數,則該數組就是您的朋友。

    var parameters = new[]{ 
          new SqlParameter(){ ParameterName="foo", Value="hello" }, 
          new SqlParameter(){ ParameterName="bar", Value="World" } 
         }; 
    x.ExecuteScalar<int>(commandText, commandType, parameters); 
    
+0

這兩個答案都很好,但我更喜歡這一個多一點。感謝大家! – Tys

1

params關鍵字意味着您可以指定不同數量的參數(因此從1到[非常]無窮大)。

您只需調用這樣的方法: ExecuteScalar<SomeType>("Command!", CommandType.SomeCommandType, dbParameter1, dbParameter2);

4

parameters參數有params keyword。這意味着,你不必明確創建數組,但可以通過一個可變數量的參數的方法:

x.ExecuteScalar(commandText, commandType, parameter1, parameter2); 

但是,如果你願意,你可以顯式地創建數組並把它傳遞給方法如下:

DbParameter[] parameters = new DbParameter[] { parameter1, parameter2 }; 

x.ExecuteScalar(commandText, commandType, parameters); 
2

的DbParameter是一個抽象類 - 但你可以實例化派生類型。

如果您正在使用SQL Server它的SqlParameter:

DbParameter[] parameters = new DbParameter[2]; 
parameters[0] = new SqlParameter("param1", 123456); 
parameters[1] = new SqlParameter("param2", "abcdef"); 
+0

這是一個即時的「索引超出範圍」異常...應該是'parameters [1]' – Nyerguds