2010-06-19 27 views
0

我試圖使用Command.Prepare與具有單個輸入參數的CommandType.Text查詢。 SELECT有幾個我用DataReader提取的列。在撥打Command.Prepare()之前,是否需要將每個選擇列指定爲輸出參數?即使我不需要指定它們,如果我這樣做會提高性能嗎?使用Command.Prepare和SELECT,我是否需要將SELECT列指定爲輸出參數?

示例代碼:

using(var connection = new SqlConnection("connection string") 
{ 
    connection.Open(); 
    using(var cmd = new SqlCommand(null, Connection)) 
    { 
     cmd.CommandText = "SELECT COLUMN1, COLUMN2, COLUMN3 " + 
          "FROM TABLE1 WHERE COLUMN4 = @thing"; 
     cmd.Parameters.Add(new SqlParameter 
           { 
            ParameterName = "@thing", 
            DbType = SqlDbType.Int, 
            Value = 1 
           }); 
     //should I add output parms for COLUMN1, COLUMN2, COLUMN3? 
     cmd.Prepare(); 
     using(var reader = cmd.ExecuteReader()) 
     { 
      //get stuff out of reader 
     } 
    } 
} 

回答

1

不,你並不需要輸出參數。您只需以正常方式將結果從讀者中排除出去。

事實上,將列作爲輸出參數沒有意義,因爲每行每列的值爲,而不是整個調用的一個值。

0

的LINQ的DataContext提供了使用的參數比SqlCommand一個更簡單的方法:

class MyRow { public string Name { get; set; } } 

class Program 
{ 
    static void Main(string[] args) 
    { 
     var dataContext = new System.Data.Linq.DataContext(
      "Data Source=localhost\\sqlexpress;" + 
      "Initial Catalog=testdb;Integrated Security=SSPI;"); 
     var rows = dataContext.ExecuteQuery<MyRow>(
      "select * from testtable where name = {0}", 
      "Joe"); 
     foreach (var r in rows) 
      Console.WriteLine(r.Name); 
    } 
} 

雖然語法類似於string.Format,傳遞給ExecuteQuery{0}最終成爲一個真正的SQL參數。

相關問題