vb.net suche die sql-database, um eine Kundennummer zu bestätigen

Gruppe, vergib mir für was eine sehr einfache Erklärung und Antwort sein kann. Allerdings bin ich selbst selbst lehrend Visual Basic und sehr neu hierzu ganz. Also weißt du, ich verwende Visual Studio 2010 Express.

Ich habe eine database erstellt, die eine Kundendatentabelle enthält. Über das Auftragseingangsmodul arbeite ich, ich möchte dem Benutzer erlauben, eine Kundenkontonummer einzugeben. Allerdings muss ich diesen Eintrag bestätigen, bevor ich mit dem Rest der Programmroutinen fortfahre. Ich denke, ich weiß, wie man eine Verbindung zur database herstellt, aber ich bin mir nicht sicher, wie der Benutzer die Nummer eingegeben hat, verglichen mit der Tabelle, um die Kundennummer zu bestätigen. Hier ist was ich geschrieben habe

Dim conn As SqlClient.SqlConnection = New SqlClient.SqlConnection Dim dbSource As String = "Data Source = DataDesign.mdf" Dim dbProvider As String = "PROVIDER=SQL server 10.0.5500;" Dim ds As New DataSet Dim sql As String = "SELECT * FROM AR_CUSTOMERS" Dim da As SqlClient.SqlDataAdapter = New SqlClient.SqlDataAdapter(sql, conn) conn.ConnectionString = dbProvider & dbSource Dim search1 As Integer = Integer.Parse(txbCustomerNo.Text) Dim cmd1 As SqlCommand = New SqlCommand conn.Open() 

Ich stecke jetzt Ich habe meine "search" (search1) definiert, aber wie kann ich jetzt sagen, dass das Programm durch den Tisch schaut, um zu sehen, ob es eine passende Kundennummer gibt?

Ich hasse es, dich zu bitten, mir zu helfen, den Code zu schreiben. Aber ich bin hier nicht ahnungslos und ich habe nicht in der Lage, ein gutes Beispiel zu finden, um mir zu helfen, den process zu verstehen und den Code selbst zu schreiben.

Wenn Sie irgendwelche Syntaxerrors sehen, zögern Sie nicht, oben zu sprechen !!


Basierend auf einigen Ihrer Antworten und weitere Forschung habe ich meinen Code geändert. Es lautet nun:

  Dim conn As SqlClient.SqlConnection = New SqlClient.SqlConnection Dim dbSource As String = "Data Source=.;AttachDbFilename=C:\Users\Don\Documents\DataDesign.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True" Dim dbProvider As String = "PROVIDER=System.Data.SqlClient;" Dim ds As New DataSet Dim sql As String = "SELECT FROM AR_CUSTOMER" Dim da As SqlClient.SqlDataAdapter = New SqlClient.SqlDataAdapter(sql, conn) conn.ConnectionString = dbProvider & dbSource Dim search1 As String = "%" & txbCustName & "%" Dim sqlQ1 As String = sql & " WHERE ARC-CUSTOMER-NAME LIKE search1" Dim cmd1 As New SqlCommand(sqlQ1, conn) conn.Open() 

Hoffentlich sieht diese Syntax (search) besser und genauer aus. Wenn nicht, bitte helfen Sie mir, es zu korrigieren.

Angenommen, das ist richtig, welche Kommando-Codes benötige ich, um den vollständigen ARC-CUSTOMER-NAME zu bekommen (und dort könnten auch mehrere Funde sein) sowie die entsprechenden ARC-CUSTOMER-NUMBER (s)? Ich gehe davon aus, dass diese data in zwei Strings gehen würden (muss ich "Dim" diese, um die data zu erhalten?), So dass es in die Checkbox (es) und Textfeld (es) auf dem Formular gesetzt werden könnte.

Es tut mir leid, dass ich das nicht besser verstehe. Ich hoffe durch die Glühbirne in meinem Kopf wird endlich kommen!

Wenn Sie nur interessiert sind, um zu finden, wenn der Kunde existiert oder nicht in der database, können Sie schreiben Code wie folgt

 Using conn = new SqlConnection(connectionString) conn.Open() Dim cmd1 = new SqlCommand("SELECT COUNT(*) FROM AR_CUSTOMERS WHERE customerNo = @custNo") cmd1.Parameters.AddWithValue("@custNo", Convert.ToInt32(txbCustomerNo.Text)) Dim result = cmd1.ExecuteScalar() if Convert.ToInt32(result) > 0 then MessageBox.Show("Customer Found") End If End Using 

die ExecuteScalar- Methode des SqlCommand-objects könnte verwendet werden, wenn Sie interessiert sind, nur eine einzelne Zeile mit einem einzigen Ergebnis zu finden, und es ist in der Regel sehr schnell in solchen Fällen.

Abgesehen davon bin ich von Ihrer Verbindungszeichenfolge sehr verwirrt. Es scheint nicht gültig zu sein.
Hier finden Sie zahlreiche Beispiele für Verbindungsstrings, die für Sql server gültig sind: http://www.connectionstrings.com/sql-server-2012

EDIT Basierend auf deinem Kommentar si jetzt klar, dass ein einfacher ExecuteScalar nicht genug ist. Wir sollten einen SqlDataReader verwenden und einen ExecuteReader verwenden. Natürlich ist die Abfrage ganz anders

 Using conn = new SqlConnection(connectionString) conn.Open() Dim cmd1 = new SqlCommand("SELECT CustomerNo, CustomerName FROM AR_CUSTOMERS " + "WHERE customerName LIKE= @custName") cmd1.Parameters.AddWithValue("@custName", "%" + txtSearchText.Text.Trim() + "%") Dim reader As SqlDataReader = cmd1.ExecuteReader() If Not reader.HasRows Then txbCustName.Text = "No customer found!" Else While reader.Read() txbCustName.Text = reader(0).ToString cbxCustNo.Text = reader(1).ToString Loop End If End Using 

Doch dieser Ansatz hat seine Probleme. Was passiert, wenn die search mit LIKE mehr als eine Zeile zurückgibt? In diesem Fall werden Ihre Textfelder mit den Werten des letzten Kunden gefüllt.
Vielleicht ist es besser, eine DataTable zu benutzen, und wenn es mehr als einen Kunden gibt, bittet der Benutzer, aus den verfügbaren zu wählen

 Using conn = new SqlConnection(connectionString) conn.Open() Dim cmd1 = new SqlCommand("SELECT CustomerNo, CustomerName FROM AR_CUSTOMERS " + "WHERE customerName LIKE= @custName") cmd1.Parameters.AddWithValue("@custName", "%" + txtSearchText.Text.Trim() + "%") Dim adapter As SqlDataAdapter = new SqlDataAdapter(cmd1) Dim table As DataTable = new DataTable() adapter.Fill(table) If table.Rows.Count = 0 Then txbCustName.Text = "No customer found!" Else if table.Rows.Count = 1 Then Dim row as DataRow = table.Rows(0) txbCustName.Text = row("CustomerName").ToString cbxCustNo.Text = row("CustomerNo").ToString Else MessageBox.Show("More than one customer found!") ..... code to show the table in a datagridview .... End If End Using 

Der einfachste path sollte schreiben sql Abfrage bereits filtern nach Kostennummer … SELECT * FROM AR_CUSTOMERS WHERE costumerNo = txbCosumerNo.Text, und dann können Sie DataSet verwenden, um data abzurufen von DataBase … (nach Ihrem Code ..)

 DataSet data = new DataSet(); da.fill(data); 

… Sie können eine DataTable aus data erhalten .. (DataSet ist eine Sammlung von DataTables), könnte einfach zu arbeiten mit.