2009-08-28 11 views
12

Ich versuche, ein lokales Programm-Management zu schreiben und ein System für mein Heimnetzwerk installieren, und ich glaube, ich die Technologien nach unten genagelt habe.Wie verbinde ich mich von C# aus mit einer SQL-Datenbank?

  • C#/NET/WPF für den Client
  • Lua für die Installation Scripting-Unterstützung (durch LuaInterface)
  • SQL Server Express für eine Datenbank von Programmen

jedoch beibehält ich bin nicht sicher, was konkret würde ich verwenden, um C# Verbindung zur Datenbank. Ist dafür etwas in das .NET Framework eingebaut? Bonuspunkte, wenn Sie einen Vorschlag haben, was ich für die Interaktion mit der Datenbank verwenden soll.

Antwort

17

Check out

Ich bin sicher, dass es da draußen noch viel mehr ist - nur Google für "ADO.NET" und "Tutorial". .....

UPDATE:

Wenn Sie auf Ihrem lokalen SQL Server Express eine Verbindung herstellen möchten, und auf die „Nordwind“ Datenbank verbinden, und lesen Sie die Top-5-Kunden aus der „Kunden“ -Tabelle, würden Sie so etwas zu tun haben:

Jetzt haben Sie alle 5 Top-Kunden aus Ihrer Northwind-Datenbank in der DataTable und Sie können sie überprüfen, ausdrucken, manipulieren - was auch immer Sie tun möchten.

Das ist ADO.NET in Aktion!

Wie die Details der Verbindungszeichenfolge - welche Optionen Sie verwenden können und wie es aussehen sollte, finden Sie auf der Connection Strings Website - es hat Tonnen von Beispielen und Erklärungen.

Marc

+0

Ähm, das hört sich vielleicht nach einer dummen Frage an, aber wie verhält sich ADO.NET zu meiner Frage? – RCIX

+1

ADO.NET ist das .NET-Subsystem zur Verbindung von C# oder VB.NET zu einer Datenbank wie SQL Server, SQL Server Express, Oracle oder was auch immer –

+0

Ok, wie verwende ich LINQ to SQL oder ähnliches damit? – RCIX

0

Natürlich können Sie einfach die Klassen in System.Data.SqlClient verwenden, obwohl die meisten Menschen ein ORM verwenden. Ich benutze LLBLGen Pro.

13

SqlConnection

Objekt wird für diese gemacht.

ZB:

SqlConnection conn = new SqlConnection(
    "Data Source=(local);Initial Catalog=Northwind;Integrated Security=SSPI"); 

oder

SqlConnection conn = new SqlConnection(
"Data Source=DatabaseServer; Initial Catalog=Northwind; User ID=YourUserID; Password=YourPassword"); 

conn.Open(); // opens the database connection 

Edit:

Nachdem alle deine Sachen tun Sie die Verbindung von

conn.Close(); 
schließen haben 0

Datenquelle: Identifiziert den Server. Dies könnte der lokale Computer, der Domänenname der Maschine oder die IP-Adresse sein.

Erster Katalog: Datenbankname.

Integrated Security: zu SSPI Set Verbindung mit Benutzer-Windows-Anmeldung

Benutzer-ID zu machen: Name der in SQL Server konfigurierten Benutzer.

Passwort: Passwort stimmt mit der SQL Server-Benutzer-ID überein.

+0

Gibt es eine spezifische Grund für die d eigene Stimme? – rahul

+0

+1 und ein bisschen neugierig auf den Downvote zu. –

+1

+1 von einem Kollegen "downvote ohne Kommentar" Empfänger. Es gibt nichts falsch oder nicht hilfreich in dieser Antwort. –

4

Zum Herstellen einer Verbindung mit SQL Server Express benötigen Sie nur System.Data, eine Standard-.NET-Assembly. Verwenden Sie einfach SqlXXX Klassen und Sie werden fertig sein.

Allerdings ist das Schreiben von ADO.NET-Code sehr langweilig, daher ist es sehr üblich, einen ORM- oder weniger schweren Ergebnissatz-Mapper wie BLToolkit zu verwenden.

Und schließlich in Betracht ziehen, SQL Server CE zu verwenden. Dies ist eine vollständig ACID-kompatible eingebettete Einzeldatei-Datenbank-Engine, die so ziemlich jedes Feature unterstützt, das Sie von einem SQL-RDBMS erwarten können.

+0

+1 für Differziation zwischen ORM und Resultset Mapper. – TheVillageIdiot

1

Derzeit ist der einfachste Weg, um Ihre Datenbank zu verbinden und Abfragen in C# ausführen ist LinqToSQL. Es wird Ihnen eine Menge Kopfschmerzen ersparen, verglichen mit der Verwendung von "Old-School" ADO-Verbindungen.

1

Sie können den ADO.Net- und System.Data.SqlClient-Namespace für denselben verwenden. Ich rate Ihnen, mit dem Entity Framework (ORM) zu gehen. Hier finden Sie Links für Entity Framework Spaziergang durch

http://thedatafarm.com/LearnEntityFramework/tutorials/creating-an-ado-net-entity-framework-entity-data-model/

http://thedatafarm.com/LearnEntityFramework/tutorials/use-an-entity-framework-entity-as-a-winforms-data-source/

+0

Das betrifft die Verwendung eines Objekts als Datenbank, ich habe eine Instanz von SQL Server Express dafür eingerichtet. – RCIX

+0

EF scheint ein wenig übertrieben zu sein, nur für ein sehr kleines Anfänger-Sample ...... macht die Sache meiner Meinung nach unnötig kompliziert. Lernen Sie zuerst die Grundlagen von nackten Knochen ADO.NET! –

+0

Ich stimme marc_s.its immer gut zu, um die Grundlagen zuerst zu lernen und ich denke nicht, dass es auch viel Zeit brauchen wird (für ADO.Net) – Mahin

1

Ich empfehle Microsoft's Patterns & Practices Enterprise Library Verwendung würde. Sie würden speziell die The Data Access Application Block verwenden.

Ein Auszug aus MSDN:

Die Data Access Application Block bietet die folgenden Vorteile:

  • Es nutzt die Funktionalität von ADO.NET 2.0 und mit ihm zur Verfügung gestellt, können Sie Einsatz ADO.NET-Funktionalität zusammen mit die Funktionalität des Anwendungsblocks.
  • Es reduziert die Notwendigkeit, Standardcode zu schreiben, um Standardaufgaben durchzuführen.
  • Es hilft konsistente Datenzugriffsverfahren beizubehalten, sowohl innerhalb einer Anwendung als auch unternehmensweit.
  • Es reduziert Schwierigkeiten beim Ändern des Datenbanktyps.
  • Es entlastet Entwickler von verschiedenen Programmiermodellen für verschiedene Arten von Datenbanken zu lernen.
  • Es reduziert die Menge an Code, den Entwickler schreiben müssen, wenn sie Anwendungen auf verschiedene Arten von Datenbanken portieren.

Ich habe diese Methode seit Jahren verwendet und es war bisher sehr erfolgreich. Viel Glück!

0

Ich möchte diese nur diese helfen versuchen ..

@CLASS

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

namespace WindowsFormsApplication2 
{ 
class clsDB 
{ 
    public SqlDataAdapter mDataAdapter = new SqlDataAdapter(); 
    public DataSet mDataSet = new DataSet(); 
    public SqlConnection mConn; 

    public clsDB() 
    { 
     mConn = new SqlConnection("Data Source=(the data source);Initial Catalog=sample;User ID=(the id);Password=(the password)"); 
    } 



    public void SQLDB(string strSQL) 
    { 
     try 
     { 
      mDataAdapter = new SqlDataAdapter(new SqlCommand(strSQL, mConn)); 
      mDataSet = new DataSet(); 
      mDataAdapter.Fill(mDataSet); 

     } 
     catch (Exception ex) 
     { 
      throw ex; 
     } 
     finally 
     { 
      mConn.Close(); 
     } 

    } 

    public void ClearRes() 
    { 
     mDataAdapter.Dispose(); 
     mDataAdapter = null; 
     mDataSet.Dispose(); 
     if (mConn.State != ConnectionState.Closed) 
     { 
      mConn.Close(); 

     } 

    } 

} 
} 

@LOGIN

public partial class Login : Form 
{ 
    clsDB x = new clsDB(); 

    public Login() 
    { 
     InitializeComponent(); 
    } 

    private void btnSubmit_Click(object sender, EventArgs e) 
    { 
      x.SQLDB("select * from tbl_accounts where u_username ='" + txtUser.Text + "' and u_password ='" + txtPass.Text + "'"); 
      if (x.mDataSet.Tables[0].Rows.Count > 0) 
      { 
       Main a = new Main(); 
       this.Hide(); 
       a.Show(); 
      } 
      else 
      { 
       MessageBox.Show("wrong username or password"); 
      } 
    } 

@MAIN ACCESS

namespace WindowsFormsApplication2 
{ 
public partial class Main : Form 
{ 
    clsDB x = new clsDB(); 

    public Main() 
    { 
     InitializeComponent(); 
    } 

    private void btnAdd_Click(object sender, EventArgs e) 
    { 
     x.SQLDB("insert into tbl_info (u_lastname, u_firstname, u_middlename) values ('" + atxtLN.Text + "','" + atxtFN.Text + "','" + atxtFN.Text + "')"); 
     fillgrid(); 
    } 

    private void Main_Load(object sender, EventArgs e) 
    { 
     x.SQLDB(" select * from tbl_info "); 
     dgv1.DataSource = x.mDataSet.Tables[0]; 
     fillgrid(); 
    } 
    void fillgrid() 
    { 
     x.SQLDB("select * from tbl_info"); 
     dgv1.DataSource = null; 
     dgv1.DataSource = x.mDataSet.Tables[0]; 
    } 
    void search() 
    { 
     x.SQLDB("SELECT * from tbl_info where u_id like '" + etxtID.Text + "%' order by u_id"); 
     if (x.mDataSet.Tables[0].Rows.Count > 0) 
     { 
      x.mDataAdapter.Fill(x.mDataSet, "tbl_info"); 
      dgv1.DataSource = x.mDataSet.Tables["tbl_info"].DefaultView; 

      etxtLN.Text = dgv1.Rows[dgv1.CurrentRow.Index].Cells["u_lastname"].Value.ToString(); 
      etxtFN.Text = dgv1.Rows[dgv1.CurrentRow.Index].Cells["u_firstname"].Value.ToString(); 
      etxtMN.Text = dgv1.Rows[dgv1.CurrentRow.Index].Cells["u_middlename"].Value.ToString(); 
     } 
     else if (etxtID.Text == "Type User ID to Edit") 
     { 
      etxtLN.Text = ""; 
      etxtFN.Text = ""; 
      etxtMN.Text = ""; 
     } 
     else 
     { 
      etxtLN.Text = ""; 
      etxtFN.Text = ""; 
      etxtMN.Text = ""; 
     } 
    } 
    private void etxtID_TextChanged(object sender, EventArgs e) 
    { 

    } 

    private void etxtID_Enter(object sender, EventArgs e) 
    { 
     etxtID.Text = ""; 
     etxtID.ForeColor = Color.Black; 
    } 

    private void etxtID_Leave(object sender, EventArgs e) 
    { 
     if (etxtID.Text == "") 
     { 
      etxtID.ForeColor = Color.Gray; 
      etxtID.Text = "Type User ID to Edit"; 

      x.SQLDB(" select * from tbl_info "); 
      dgv1.DataSource = x.mDataSet.Tables[0]; 
      fillgrid(); 
     } 
    } 

    private void etxtID_KeyUp(object sender, KeyEventArgs e) 
    { 
     search(); 
    } 

    private void btnUpdate_Click(object sender, EventArgs e) 
    { 
     x.SQLDB("UPDATE tbl_info set u_lastname ='" + etxtLN.Text + "', u_firstname ='" + etxtFN.Text + "', u_middlename ='" + etxtMN.Text + "' where u_id =" + etxtID.Text); 
     MessageBox.Show("Operation Successful!"); 
     fillgrid(); 
    } 

    private void btnDelete_Click(object sender, EventArgs e) 
    { 
     x.SQLDB("delete from tbl_info where u_id =" + dtxtID.Text + ""); 
     MessageBox.Show("Operation Successful!"); 
     fillgrid(); 
    } 
} 
} 
Verwandte Themen