2017-01-05 1 views
0

Ich bin extrem neu in C# -Web-Entwicklung (oder irgendeine Entwicklung für diese Angelegenheit), aber ich versuche herauszufinden, wie Sie die Ergebnisse von einer SQL-Abfrage in eine Variable speichern. Ich denke, ich verstehe den Prozess, aber viele der Beispiele, die ich im Web finde, verwenden eine SqlConnection-Anweisung. Meine Kopie von Visual Studio scheint diesen Befehl nicht zu haben (ziemlich sicher, dass ich hier das falsche Wort verwende). Was fehlt mir softwaremäßig oder wissensmäßig, um meine Aufgabe zu erfüllen?SqlConnection in VS2015 C#

Vielen Dank im Voraus für Ihre Hilfe. Dep

+1

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

+1

Sie ' d benötigt einen Verweis auf System.Data und ein 'using System.Data.SqlClient;' – juharr

Antwort

2

Es hängt davon ab, was Sie tun möchten: einfügen, aktualisieren, Daten abrufen. Es hängt auch davon ab, ob Sie eine ORM-Bibliothek verwenden möchten oder nicht. Ich bin abhängig. Der Code, den ich unten zu kopieren ist ein Beispiel dafür, wie eine Datatable mit Ado.Net abzurufen (wie Sie SqlConnection erwähnt):

Sie verwenden müssen:

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

Dies ist der Code eine Datentabelle zum Abrufen

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; 
     } 

Dies ist der Code eine Abfrage für die Ausführung, die nicht mit und ohne Parameter Ergebnis nicht erwartet:

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

Sie brauchen die 'conn.Open()' in 'ExecuteDataset' nicht, da' da.Fill (ds) 'die Verbindung öffnet wenn es nicht bereits geöffnet ist und es schließt, wenn es geschlossen wurde, als es aufgerufen wurde (dh Es lässt den 'ConnectionState' unverändert. –

+0

Danke, wusste nicht, dass :) – NicoRiff

+0

Wenn Ihre Verbindung und Befehl mit verwenden, wird es viel besser sein –

0

Wenn Sie wirklich neu in C# mit SQL Server sind, würde ich empfehlen, von vorne anzufangen, indem Sie eines der angezeigten Tutorials here verwenden. Es bietet eine Vielzahl von Informationen in einer Schritt-für-Schritt-Weise:

  1. Die Grundlagen
  2. klar Definition des Kern ceoncepts
  3. So richten Sie Abhängigkeiten, um loszulegen
  4. Wie Entwicklung wählen zwischen Modelle (Code, Modell vs. Datenbank zuerst)
  5. Wie Abfragen

und vieles mehr zu schreiben.

Die Verwendung von SqlConnection ist eine gültige Wahl, erfordert jedoch mehr Aufwand beim Schreiben der Abfragen für grundlegende Aufgaben wie das Auswählen, Aktualisieren, Löschen oder Einfügen von Daten. Sie müssen die Abfragen tatsächlich erstellen und darauf achten, die Befehle zu erstellen und zu entfernen.

0

Über einen entsprechenden Hinweis:

Der neue Weg, um alle Datenbank-Aktivitäten im Zusammenhang mit in C# oder .NET Entity Framework (EF) zu nutzen, wäre zu tun, und versuchen, aus jedem ADO.NET-basierten wegzubewegen Code. Letzteres existiert noch und wurde nicht als veraltet markiert. Möglicherweise möchten Sie ADO.NET für kleine Apps oder für alle PoC-Aufgaben verwenden. Aber sonst ist EF der richtige Weg.

EF ist ein ORM, und ist in der Tat als ein Repository-Muster gebaut und generiert eine konzeptionelle Ebene für uns zu arbeiten. Alle Nuancen der Verbindung und des Befehls sind vollständig von uns gekapselt. Auf diese Weise müssen wir uns nicht mit diesen Nacktem einmischen.

0

Wenn Sie es gut machen wollen, müssen Sie eine Datei namens Web bearbeiten.config in Ihrem Projekt und setzt so etwas wie diese innen (mit Ihren eigenen DB-Daten):

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

</connectionStrings> 

Dann wird in dem Code, können Sie es mit verwenden:

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

Schließlich können Sie, dass Sie tun wollen mit „con“ zum Beispiel:

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

Hier ist das einfachste Beispiel ich denken kann, beachten Sie bitte die Verwendung von Aussagen und Kommentare

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(); 

     } 
    } 
}