2017-01-05 18 views
0

私はC#Web開発(またはその開発に関しては全く新しい)ですが、SQLクエリから結果を変数に保存する方法を理解しようとしています。私はそのプロセスを理解していると思いますが、Web上にある多くの例ではSqlConnectionステートメントを使用しています。 Visual Studioの私のコピーにはそのコマンドがないようです(私はここで間違った言葉を使っています)。私はソフトウェア的に欠けているか、knowledgewise私の仕事を達成するか?VS2015でのSqlConnection C#

ご協力いただきありがとうございます。 Dep

+1

[Google - "ado.net tutorial c#"](https://www.google.com/?q=ado.net%20tutorial#q=ado.net+tutorial+c%23) – Igor

+1

あなたは、 d System.Dataへの参照と 'System.Data.SqlClientを使用する '; – juharr

答えて

2

これは、挿入、更新、取得するデータによって異なります。また、ORMライブラリを使用するかどうかによって異なります。私はすべて依存しています。 (あなたがSqlConnectionオブジェクトを述べたように)私は以下のコピーのコードは、DataTableを使用してAdo.Netを取得する方法の例です:

あなたが使用する必要があります:

using System.Data; 
using System.Data.SqlClient; 

これは、データテーブルを取得するためのコードです

private DataSet ExecuteDataset(string query) 
    { 
     var conn = new SqlConnection("Data Source=" + Server + ";Initial Catalog=" + Database + ";User Id=" + Username + ";Password=" + Password + ";"); 
     DataSet ds; 
     try 
     { 
      conn.Open(); 
      ds = new DataSet(); 
      var da = new SqlDataAdapter(query, conn); 
      da.Fill(ds); 
     } 
     catch (Exception) 
     { 
      throw; 
     } 
     finally 
     { 
      conn.Dispose(); 
      conn.Close(); 
     } 
     return ds; 
    } 

     private DataSet ExecuteDataset(string query, SqlParameter[] parametros) 
     { 
      var conn = new SqlConnection("Data Source=" + Server + ";Initial Catalog=" + Database + ";User Id=" + Username + ";Password=" + Password + ";"); 
      DataSet ds; 
      try 
      { 
       conn.Open(); 

       SqlCommand command = conn.CreateCommand(); 
       command.CommandText = query; 

       foreach (SqlParameter p in parametros) 
       { 
        command.Parameters.Add(p); 
       } 

       ds = new DataSet(); 
       var da = new SqlDataAdapter(command); 
       da.Fill(ds); 
      } 
      catch (Exception) 
      { 
       throw; 
      } 
      finally 
      { 
       conn.Dispose(); 
       conn.Close(); 
      } 
      return ds; 
     } 

これはとして、パラメータを指定せず結果は予想していないクエリを実行するためのコードです:

private void ExecuteNonQuery(string query) 
    { 
     var conn = new SqlConnection("Data Source=" + Server + ";Initial Catalog=" + Database + ";User Id=" + Username + ";Password=" + Password + ";"); 
     try 
     { 
      conn.Open(); 
      SqlCommand command = conn.CreateCommand(); 
      command.CommandText = query; 
      command.ExecuteNonQuery(); 
     } 
     catch (Exception) 
     { 
      throw; 
     } 
     finally 
     { 
      conn.Dispose(); 
      conn.Close(); 
     } 
    } 

    private void ExecuteNonQuery(string query, SqlParameter[] parametros) 
    { 
     var conn = new SqlConnection("Data Source=" + Server + ";Initial Catalog=" + Database + ";User Id=" + Username + ";Password=" + Password + ";"); 
     try 
     { 
      conn.Open(); 
      SqlCommand command = conn.CreateCommand(); 
      command.CommandText = query; 

      foreach (SqlParameter p in parametros) 
      { 
       command.Parameters.Add(p); 
      } 

      command.ExecuteNonQuery(); 
     } 
     catch (Exception) 
     { 
      throw; 
     } 
     finally 
     { 
      conn.Dispose(); 
      conn.Close(); 
     } 
    } 
+0

' da.Fill(ds) 'が接続を開くため、' ExecuteDataset'に 'conn.Open()'は必要ありません。それがまだ開いていなければ、それが呼び出されたときに閉じられていれば閉じます(つまり'ConnectionState'は変更されません)。 –

+0

ありがとう、それを知らなかった: – NicoRiff

+0

あなたの接続とコマンドを使用して、それははるかに良いでしょう –

0

SQL ServerのC#を初めてお使いの方は、hereというチュートリアルの1つを使用して最初から開始することをお勧めします。これは、段階的に多くの情報を提供しています

  1. 基本
  2. 明らかにコアceoncepts
  3. の定義、開発の間で選択する方法
  4. を始めるためにどのようにセットアップ依存関係にモデル(コード、最初のデータベース対モデル)
  5. 書き方をクエリ

とはるかに。

SqlConnectionを使用することは有効ですが、データの選択、更新、削除、挿入などの基本的な操作を行うためのクエリの作成には多くの労力が必要です。実際には、クエリを構築して、コマンドを構築して処分する必要があります。関連ノートで

0

Entity Frameworkの(EF)を活用し、任意のADO.NETベースから離れて移動しようとすることですC#や.NETでのすべてのデータベース関連の活動を行うための新しい方法コード。後者は依然として存在し、時代遅れとマークされていません。小さなアプリやPoCタスクにはADO.NETを使いたいかもしれません。しかし、そうでなければ、EFは道のりです。

EFはORMであり、実際にはリポジトリパターンとして作成され、私たちが作業するための概念的なレイヤーを生成します。接続とコマンドのニュアンスはすべて、私たちから完全にカプセル化されています。このようにして、これらの裸の骨に干渉する必要はありません。

0

うまくやりたい場合は、Webという名前のファイルを編集する必要があります。あなたのプロジェクトに設定して(独自のDBのデータで)この内部のようなものを置くには:

SqlConnection con = new SqlConnection(
    WebConfigurationManager.ConnectionStrings["myConnectionString"].ConnectionString); 

最後に、あなたがあなたのことを行うことができます。

<connectionStrings > 
    <add 
     name="myConnectionString" 
     connectionString="Server=myServerAddress;Database=myDataBase;User ID=myUsername;Password=myPassword;Trusted_Connection=False;" 
     providerName="System.Data.SqlClient"/> 

</connectionStrings> 

次に、コードでは、あなたがそれを使用することができます例えば、「詐欺」としたい:ここ

string queryString = "SELECT name, surname FROM employees"; 

SqlCommand command = new SqlCommand(queryString, con); 
con.Open(); 
SqlDataReader reader = command.ExecuteReader(); 
try 
{ 
    while (reader.Read()) 
    { 
     Console.WriteLine(String.Format("{0}, {1}", 
     reader["name"], reader["surname"])); 
    } 
} 
finally 
{ 
    reader.Close(); 
} 
0

は、usingステートメントとコメント

のことに注意してください、私は考えることができる最も簡単な例であります0
using System; 
using System.Data; 
using System.Data.SqlClient; 

namespace DataAccess 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      //Use your database details here. 
      var connString = @"Server=localhost\SQL2014;Database=AdventureWorks2012;Trusted_Connection=True;"; 

      //Enter query here, ExecuteScalar returns first column first row only 
      //If you need to return more records use ExecuteReader/ExecuteNonQuery instead 
      var query = @"SELECT [AccountNumber] 
          FROM [Purchasing].[Vendor] 
          where Name = @Name"; 

      string accountNumber = string.Empty; 

      //Using statement automatically closes the connection so you don't need to call conn.Close() 
      using (SqlConnection conn = new SqlConnection(connString)) 
      { 
       SqlCommand cmd = new SqlCommand(query, conn); 
       //Replace @Name as parameter to avoid dependency injection 
       cmd.Parameters.Add("@Name", SqlDbType.VarChar); 
       cmd.Parameters["@name"].Value = "Michael"; 
       try 
       { 
        conn.Open(); 
        //Cast the return value to the string, if it's an integer then use (int) 
        accountNumber = (string)cmd.ExecuteScalar(); 
       } 
       catch (Exception ex) 
       { 
        Console.WriteLine(ex.Message); 
       } 
      } 
      Console.WriteLine(accountNumber); 
      //ReadKey just to keep the console from closing 
      Console.ReadKey(); 

     } 
    } 
}