2009-03-03 58 views
1

這真是一個非常愚蠢的問題,但我習慣於使用linq /其他方法來連接和查詢數據庫,我從來沒有停下來學習如何從頭開始。將sql語句作爲字符串傳遞給mssql與C#?

問:如何建立到數據庫的手動連接並將它傳遞給C#中的字符串參數? (是的,我知道......純粹的無知)。

由於

回答

3
using (SqlConnection conn = new SqlConnection(databaseConnectionString)) 
{ 
    using (SqlCommand cmd = conn.CreateCommand()) 
    { 
     cmd.CommandText = "StoredProcedureName"; 
     cmd.CommandType = CommandType.StoredProcedure; 

     cmd.Parameters.AddWithValue("@ID", fileID); 

     conn.Open(); 
     using (SqlDataReader rdr = 
        cmd.ExecuteReader(CommandBehavior.CloseConnection)) 
     { 
      if (rdr.Read()) 
      { 
       // process row from resultset; 
      } 
     } 
    } 
} 
1

一種使用SqlCommand類來執行使用ado.net SQL Server上的命令(或者存儲過程或SQL)。教程比比皆是。

+0

謝謝 - 我試圖搜索它,但得到了廣泛的結果,其中沒有一個似乎是我正在尋找。 SqlCommand類肯定會縮小搜索範圍。謝謝 – Chance 2009-03-03 02:22:31

1

下面是http://www.csharp-station.com/Tutorials/AdoDotNet/Lesson07.aspx

public void RunStoredProcParams() 
    { 
     SqlConnection conn = null; 
     SqlDataReader rdr = null; 

     // typically obtained from user 
     // input, but we take a short cut 
     string custId = "FURIB"; 

     Console.WriteLine("\nCustomer Order History:\n"); 

     try 
     { 
      // create and open a connection object 
      conn = new 
       SqlConnection("Server=(local);DataBase=Northwind;Integrated Security=SSPI"); 
      conn.Open(); 

      // 1. create a command object identifying 
      //  the stored procedure 
      SqlCommand cmd = new SqlCommand(
       "CustOrderHist", conn); 

      // 2. set the command object so it knows 
      // to execute a stored procedure 
      cmd.CommandType = CommandType.StoredProcedure; 

      // 3. add parameter to command, which 
      // will be passed to the stored procedure 
      cmd.Parameters.Add(
       new SqlParameter("@CustomerID", custId)); 

      // execute the command 
      rdr = cmd.ExecuteReader(); 

      // iterate through results, printing each to console 
      while (rdr.Read()) 
      { 
       Console.WriteLine(
        "Product: {0,-35} Total: {1,2}", 
        rdr["ProductName"], 
        rdr["Total"]); 
      } 
     } 
     finally 
     { 
      if (conn != null) 
      { 
       conn.Close(); 
      } 
      if (rdr != null) 
      { 
       rdr.Close(); 
      } 
     } 
    } 
爲例
+0

對此示例的改進是使用「using」關鍵字來自動處理Connection,Command和Reader實例。 – 2009-03-03 02:23:26

1

3事情沒有人表現出你的呢:

  • 「堆疊」 使用報表
  • 設置明顯的參數類型,而不是讓.Net嘗試爲您選擇一個
  • 「var」關鍵字

string sql = "MyProcedureName"; 

using (var cn = new SqlConnection(databaseConnectionString)) 
using (var cmd = new SqlCommand(sql, cn)) 
{ 
    cmd.CommandType = CommandType.StoredProcedure; 
    cmd.Parameters.Add("@ParameterName", SqlDbType.VarChar, 50) 
     .Value = "MyParameterValue"; 

    conn.Open(); 
    using (SqlDataReader rdr = 
       cmd.ExecuteReader(CommandBehavior.CloseConnection)) 
    { 
     if (rdr.Read()) 
     { 
      // process row from resultset; 
     } 
    } 
} 
相關問題