小组成员,请原谅我可能是一个非常简单的解释和回答。不过,我正在自学Visual,并且对此非常陌生。所以你知道,我使用的是Visual 2010 Express。
我创建了一个包含客户记录表的数据库。通过我正在处理的订单输入模块,我希望允许用户输入一个客户帐号。但是,在继续执行其余的程序例程之前,我需要验证这个条目。我想我知道如何连接数据库,但我不知道如何将用户输入的号码与表进行比较,以验证客户编号。以下是我所写的:
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名称(并且可能有多个查找)以及相应的ARC-客户编号?我假设这些数据会分成两个字符串(我需要"Dim“这些字符串来接收数据吗?)以便可以将其放入表单上的复选框(Es)和textbox(es)中。
很抱歉我没能更好地理解。我希望通过这个,我脑子里的灯泡终于来了!
发布于 2013-03-15 20:40:51
如果您只想知道客户是否存在于数据库中,您可以编写如下代码
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对象的SqlCommand方法,而且在这种情况下通常非常快速。
除此之外,我对你的连接字符串感到非常困惑。这似乎不是一个有效的办法。
在这里,您可以找到许多对Server有效的连接字符串示例:http://www.connectionstrings.com/sql-server-2012
根据您的评论编辑,现在可以清楚地看到,一个简单的ExecuteScalar是不够的。我们应该使用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发布于 2013-03-15 19:50:54
最简单的方法应该是将sql查询按客户编号进行过滤.从AR_CUSTOMERS选择* costumerNo = txbCosumerNo.Text,然后可以使用DataSet存储从DataBase检索到的数据.(按照您的代码.)
DataSet data = new DataSet();
da.fill(data);..。你可以从数据中得到一个DataTable。(DataSet是DataTables的集合),可以很容易地使用。
https://stackoverflow.com/questions/15440729
复制相似问题