vb.net 中如何使用SQL语句查询数据库中的数据
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了vb.net 中如何使用SQL语句查询数据库中的数据相关的知识,希望对你有一定的参考价值。
用"select * from 表1 "连接数据库成功,现在要执行SQL语句"Select * from 表1 Where 姓名=小强"该怎么办啊??请指教谢谢。
(只采纳解答比较详细的,代码解释清楚的。)
用的是vb2003
1、首先打开Visual Studio 2008代码窗口,添加引用。
2、输入以下代码:Public conn1 As SqlConnection = New SqlConnection 。
3、声明关键字 Public;(因为是全局变量,所以用Public 来声明)。
4、如果SQL 数据库就在本机,则用以下代码连接。
5、如果代码太长,影响可读性,可以用空格加"_"后,回车换行即可。
参考技术A 50分就回答一下吧,我的答案才是正确的窗体名称如果是Form1
添加两个控件出来,一个是按扭Button1,一个是表格DataGridView1
然后你直接用我的代码就行了不多说了
你最好把我的代码复制到你的代码窗口里再看了,这里太乱了
还有啊你并没有给出数据库名称,是用Windows登陆还是SQL登陆,你要在代码里改一下,我都注释有了的你自己慢慢看下
我用的平台是WIndows VISTA , SQL 2005 , VB 2008
Imports System.Data.SqlClient
Public Class Form1
Dim LeafSqlConnection As SqlConnection '声明这些SQL的类
Dim LeafSqlCommand As SqlCommand
Dim LeafSqlDataAdapter As SqlDataAdapter
Dim LeafData As DataTable '这个是表格的类,用来装你读取的信息的表
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
LeafSqlConnection = New SqlConnection("Data Source=.;Initial Catalog=你的数据库名称 ;Integrated Security=True;Pooling=False") '如果采用windows身份登录就用这个,数据库名称我直接写成'你的数据库名称'了,没有用户名密码
'LeafSqlConnection = New SqlConnection("Initial Catalog=你的数据库名称 ;User ID=sa;PWD=leafsoftpassword") '如果采用SQL用户密码登录用这个,注意的是前面这些数据库名称我直接写成'你的数据库名称'了,你如果要读别的数据库自己改,还有用户密码自己改
LeafSqlCommand = New SqlCommand("Select * from 表1 Where 姓名='小强';", LeafSqlConnection) '这里记得名字的两边要加符号 '
LeafSqlDataAdapter = New SqlDataAdapter
LeafSqlCommand.CommandType = CommandType.Text
LeafSqlDataAdapter.SelectCommand = LeafSqlCommand
LeafData = New DataTable
LeafSqlDataAdapter.Fill(LeafData)
DataGridView1.DataSource = LeafData
End Sub
End Class本回答被提问者采纳 参考技术B 50分就回答一下吧,我的答案才是正确的
窗体名称如果是Form1
添加两个控件出来,一个是按扭Button1,一个是表格DataGridView1
然后你直接用我的代码就行了不多说了
你最好把我的代码复制到你的代码窗口里再看了,这里太乱了
还有啊你并没有给出数据库名称,是用Windows登陆还是SQL登陆,你要在代码里改一下,我都注释有了的你自己慢慢看下
我用的平台是WIndows VISTA , SQL 2005 , VB 2008
Imports System.Data.SqlClient
Public Class Form1
Dim LeafSqlConnection As SqlConnection '声明这些SQL的类
Dim LeafSqlCommand As SqlCommand
Dim LeafSqlDataAdapter As SqlDataAdapter
Dim LeafData As DataTable '这个是表格的类,用来装你读取的信息的表
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
LeafSqlConnection = New SqlConnection("Data Source=.;Initial Catalog=你的数据库名称 ;Integrated Security=True;Pooling=False") '如果采用windows身份登录就用这个,数据库名称我直接写成'你的数据库名称'了,没有用户名密码
'LeafSqlConnection = New SqlConnection("Initial Catalog=你的数据库名称 ;User ID=sa;PWD=leafsoftpassword") '如果采用SQL用户密码登录用这个,注意的是前面这些数据库名称我直接写成'你的数据库名称'了,你如果要读别的数据库自己改,还有用户密码自己改
LeafSqlCommand = New SqlCommand("Select * from 表1 Where 姓名='小强';", LeafSqlConnection) '这里记得名字的两边要加符号 '
LeafSqlDataAdapter = New SqlDataAdapter
LeafSqlCommand.CommandType = CommandType.Text
LeafSqlDataAdapter.SelectCommand = LeafSqlCommand
LeafData = New DataTable
LeafSqlDataAdapter.Fill(LeafData)
DataGridView1.DataSource = LeafData
End Sub
End Class 参考技术C Dim mySelectQuery As String = "Select * from 表1 Where 姓名='小强'"
Dim myCommand As New SqlCommand (mySelectQuery, conn) '建立一个Command控件,conn是你的SqlConnection对象
conn.Open()'打开数据连接
Dim myReader As SqlDataReader'定义一个reader用来读数据
myReader = myCommand.ExecuteReader()'运行你的查询,结果到myReader
if myReader.Read() then '如果查到了数据
msgbox(myReader.GetString(0)) '显示第一个字段
end if
vb.net中的SQL事务语句
【中文标题】vb.net中的SQL事务语句【英文标题】:SQL transaction statement in vb.net 【发布时间】:2016-07-18 13:03:11 【问题描述】:我正在制作一个链接到 Microsoft SQLServer 的项目,用于输入、删除、编辑有关客户和订单的数据。完整的系统可以工作,但是我被建议使用事务而不是常规 SQL 语句来添加/删除/编辑数据等。
问题是,我之前和过去几个小时的研究都没有使用过这些,我什至不知道如何开始使用它们。
谁能告诉我如何把下面的代码变成一个事务?
Public Shared Function SaveNewPerson(ByVal firstName As String, lastName As String, ByVal age As Integer, ByVal postcode As String, m_cn As OleDbConnection)
Dim Dc As New OleDbCommand
Dc.Connection = m_cn
m_cn.Open()
Dc.CommandText = "INSERT INTO tblPerson([firstName], [lastName], [age], [postcode]) VALUES('" & firstName & "', '" & lastName & "', '" & age & "', '" & postcode & "')"
Dc.ExecuteNonQuery()
Dim personID As Integer
Dc.CommandText = "SELECT @@IDENTITY"
Dc.CommandType = CommandType.Text
personID = CType(Dc.ExecuteScalar(), Integer)
m_cn.Close()
End Function
【问题讨论】:
在您做任何其他事情之前,您需要阅读、理解并开始使用参数化查询。您的代码对 sql 注入是开放的。您还应该考虑使用 SCOPE_IDENTITY 而不是 @@Identity。希望您被告知的是使用参数化查询。事务本身不执行插入等。 您还应该小心Shared
函数,例如SaveNewPerson
。如果你在其中使用共享变量,这可能会在多线程系统中搞砸。
另一个建议是存储生日而不是年龄。年龄是根据当前现实世界时间计算得出的值,而不是作为事实存储在表中。
@AlexB。多线程系统是什么意思?
@SeanLange 虽然我个人同意将 SqlClient 与此类程序一起使用更有意义,但我也使用 OleDb,但这只是因为我在大学就是这样教它的,而在我工作的软件公司也在 SqlClient 上使用它。真的很奇怪。
【参考方案1】:
我刚刚在学习 TSQL,看看这种代码是否适合你(注意你需要 Dim tr
(如果你愿意,可以使用不同的变量名)并在多个地方使用它,但不像在某些语言中,您不需要为不同的方法设置对象。
Public Shared Function SaveNewIncident(ByVal clientName As String, dateStart As Date, dateEnd As Date, ByVal incidentProblem As String, ByVal timeStart As String, ByVal timeEnd As String,
ByVal incidentSolved As Boolean, ByVal incidentSolution As String, _con As OleDbConnection)
Dim tr As OleDbTransaction = Nothing
Try
Dim Dc As New OleDbCommand
Dc.Connection = _con
tr = _con.BeginTransaction()
Dc.CommandType = CommandType.Text
Dc.CommandText = "INSERT INTO dbo.tblIncidents VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?)"
Dc.Transaction = tr
Dc.Parameters.Add("@clientName", OleDbType.VarChar).Value = clientName
Dc.Parameters.Add("@dateStart", OleDbType.Date).Value = dateStart
Dc.Parameters.Add("@dateEnd", OleDbType.Date).Value = dateEnd
Dc.Parameters.Add("@incidentProblem", OleDbType.LongVarChar).Value = incidentProblem
Dc.Parameters.Add("@timeStart", OleDbType.VarChar).Value = timeStart
Dc.Parameters.Add("@timeEnd", OleDbType.VarChar).Value = timeEnd
Dc.Parameters.Add("@incidentSolved", OleDbType.Boolean).Value = incidentSolved
Dc.Parameters.Add("@incidentSolution", OleDbType.LongVarChar).Value = incidentSolution
Dim personID As Integer
Dc.CommandText = "SELECT SCOPE_IDENTITY() AS personID"
Dc.CommandType = CommandType.Text
personID = CType(Dc.ExecuteScalar(), Integer)
tr.Commit()
Catch ex As Exception
tr.Rollback()
Throw
End Try
End Function
【讨论】:
这行得通,如何参数化代码以减少对 sql 注入的开放性? 请不要像这样发布对 sql 注入开放的答案。需要参数化。 @SeanLange 我只是发布这个来帮助解决最初的问题。我自己并不完全确定 paramatizing 是如何工作的,这可能是一个不同的问题。但谁说这将是一个上线的程序?如果它不被使用并且仅用于课程/学位等,甚至可能不用担心 可悲的是,人们在学校学习的技术与他们在现实世界中编程的方式相同。学习正确地做最初会促进良好的编码实践。并且错误地学习这样做会促进不良的开发实践。这应该是参数化的,它应该使用 SCOPE_IDENTITY 代替。那么这将是一个很好的答案。 @SeanLange 我可以/已经在 SCOPE_IDENTITY 语句中添加(虽然我没有看到太多缺点,但我确实读到@@IDENTITY 在插入带有条件语句的记录时会导致问题?)我可以看到这个比较好,以后会经常用这个,谢谢!以上是关于vb.net 中如何使用SQL语句查询数据库中的数据的主要内容,如果未能解决你的问题,请参考以下文章