Sql server vb.net搜索sql数据库以验证客户帐号
小组,请原谅我可能是一个非常简单的解释和答案。然而,我自己自学了VisualBasic,对它完全陌生。所以你知道,我正在使用VisualStudio2010Express 我创建了一个数据库,其中包含一个customer records表。通过我正在使用的订单输入模块,我希望允许用户输入客户帐号。但是,在继续执行其余的程序例程之前,我需要验证这个条目。我想我知道如何连接到数据库,但我不确定如何让用户输入的号码与表进行比较,以验证客户号码。以下是我写的:Sql server vb.net搜索sql数据库以验证客户帐号,sql-server,vb.net,validation,Sql Server,Vb.net,Validation,小组,请原谅我可能是一个非常简单的解释和答案。然而,我自己自学了VisualBasic,对它完全陌生。所以你知道,我正在使用VisualStudio2010Express 我创建了一个数据库,其中包含一个customer records表。通过我正在使用的订单输入模块,我希望允许用户输入客户帐号。但是,在继续执行其余的程序例程之前,我需要验证这个条目。我想我知道如何连接到数据库,但我不确定如何让用户输入的号码与表进行比较,以验证客户号码。以下是我写的: Dim conn
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()
我现在被卡住了。我已经定义了我的“搜索”(search1),但是我现在如何告诉程序查看表中是否有匹配的客户号
我讨厌请你帮我写代码。但是我在这里不知道,我还没有找到一个好的例子来帮助我理解这个过程并自己编写代码
如果你看到任何语法错误,不要犹豫,大声说出来
根据您的一些回答和进一步的研究,我修改了我的代码。现在改为:
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()
希望这种语法(搜索)看起来更好更准确。如果没有,请帮我改正
假设这是正确的,我需要什么命令代码来获取完整的ARC-CUSTOMER-NAME(可能有多个查找)以及相应的ARC-CUSTOMER-NUMBER?我假设这些数据将分为两个字符串(我是否需要“调暗”这些字符串以接收数据?),这样就可以将其放入表单上的复选框和文本框中
很抱歉,我不能更好地理解这一点。我希望通过这个,我头脑中的灯泡最终会亮起来 最简单的方法应该是编写已经按客户编号过滤的sql查询。。。选择*FROM AR_CUSTOMERS,其中customerno=txbCosumerNo.Text,然后您可以使用DataSet存储从数据库检索到的数据。。。(遵循您的代码…)
。。。您可以从数据中获取数据表。。(数据集是数据表的集合),可能很容易使用。最简单的方法应该是编写已经按客户编号筛选的sql查询。。。选择*FROM AR_CUSTOMERS,其中customerno=txbCosumerNo.Text,然后您可以使用DataSet存储从数据库检索到的数据。。。(遵循您的代码…)
。。。您可以从数据中获取数据表。。(数据集是数据表的集合),可以很容易地使用。如果您只是想知道客户是否存在于数据库中,您可以编写如下代码
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
如果您只想找到一行和一个结果,那么可以使用SqlCommand对象的方法,在这种情况下,这种方法通常非常快
除此之外,我对你的连接字符串感到非常困惑。它似乎不是有效的。在这里,您可以找到许多对Sql Server有效的连接字符串示例: 编辑 根据您的评论,现在很明显,一个简单的ExecuteCalar是不够的。我们应该使用SqlDataReader和ExecuteReader。当然,查询是完全不同的
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
然而,这种方法也有它的问题。如果使用LIKE搜索返回多行呢?在这种情况下,您的文本框将填充找到的最新客户的值。也许最好使用DataTable,如果有多个客户,请用户从可用客户中进行选择
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
如果您只是想知道数据库中是否存在客户,那么可以编写如下代码
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
如果您只想找到一行和一个结果,那么可以使用SqlCommand对象的方法,在这种情况下,这种方法通常非常快
除此之外,我对你的连接字符串感到非常困惑。它似乎不是有效的。在这里,您可以找到许多对Sql Server有效的连接字符串示例: 编辑 根据您的评论,现在很明显,一个简单的ExecuteCalar是不够的。我们应该使用SqlDataReader和ExecuteReader。当然,查询是完全不同的
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
然而,这种方法也有它的问题。如果使用LIKE搜索返回多行呢?在这种情况下,您的文本框将填充找到的最新客户的值。也许最好使用DataTable,如果有多个客户,请用户从可用客户中进行选择
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
从客户ID为“12345”的应收客户中选择*
。阅读有关SQL和ADO的更多信息。Net@codingbiz如果您只需要检查CustomerID
是否有效,那么SELECT*
是一种浪费(也是惹恼DBA的好方法)<代码>从客户ID为'12345'的应收客户中选择计数(1)会更好。这一点很好。但这也会让OP感到困惑。仅基于问题中的现有查询。选择*FROM AR\u CUSTOMERS,其中CustomerID='12345'
。阅读有关SQL和ADO的更多信息。Net@codingbiz如果您只需要检查CustomerID
是否有效,那么SELECT*
是一种浪费(也是惹恼DBA的好方法)<代码>从客户ID为'12345'的应收客户中选择计数(1)会更好。这一点很好。但这也会让OP感到困惑。仅基于问题中现有的查询。让我更好地解释一下我这样做的原因:表单文本框包含客户姓名的一部分(可能是姓氏)。因此,%通配符。假设用户在文本框中输入“Williams”。我现在想让代码去搜索AR_Customer表,查看Customer Name列并找到“Williams”。当它找到它时,我需要将完整的客户名称与客户帐户numb一起移动到一个文本框(称为“txbCustName”)