作者在 2010-04-11 14:25:09 发布以下内容
自己动手使用参数化查询连接了数据库。
Dim sqlConn As String = "Data Source=;Initial Catalog=employer;Integrated Security=True"
Dim objConn As SqlClient.SqlConnection
objConn = New SqlClient.SqlConnection(sqlConn)
Dim strsql As String
strsql = "select * from 员工信息表 where 姓名=@姓名"
Dim objcmd As SqlClient.SqlCommand
objcmd = New SqlClient.SqlCommand(strsql, objConn)
Dim sqlprm As New SqlClient.SqlParameter("姓名", SqlDbType.VarChar) ' "@姓名"也可用。
objcmd.Parameters.Add(sqlprm).Value = TextBox1.Text.ToString
Dim objDA As SqlClient.SqlDataAdapter
objDA = New SqlClient.SqlDataAdapter(objcmd)
Dim objDS As New Data.DataSet
objDA.Fill(objDS, "11")
Me.DataGrid1.DataSource = objDS.Tables("11")
objConn.Close()
经验总结:Dim objConn As SqlClient.SqlConnection
objConn = New SqlClient.SqlConnection(sqlConn)
Dim strsql As String
strsql = "select * from 员工信息表 where 姓名=@姓名"
Dim objcmd As SqlClient.SqlCommand
objcmd = New SqlClient.SqlCommand(strsql, objConn)
Dim sqlprm As New SqlClient.SqlParameter("姓名", SqlDbType.VarChar) ' "@姓名"也可用。
objcmd.Parameters.Add(sqlprm).Value = TextBox1.Text.ToString
Dim objDA As SqlClient.SqlDataAdapter
objDA = New SqlClient.SqlDataAdapter(objcmd)
Dim objDS As New Data.DataSet
objDA.Fill(objDS, "11")
Me.DataGrid1.DataSource = objDS.Tables("11")
objConn.Close()
一、在指定Parameter对象的Value属性时占位符@可省略。
二、在objDA.Fill(objDS, "11")时出现错误提示如下:
数据类型 text 和 varchar 在 equal to 运算符中不兼容。
之所以出现这样的错误是因为我在表中该字段用的text类型,而在参数指定时指定了VarChar类型。
另外,即使在参数指定时指定Text类型也不行,会出现“数据类型 text 和 text 在 equal to 运算符中不 兼容。"的错误提示。
解决方法:1、将数据库字段时的text数据类型改为VarChar。
2、sql 语句改为: strsql = "select * from 员工信息表 where Convert(nvarchar(255),姓名)=@姓名"
三、可以在SQL数据库时面用代码建立存储过程来替代sql语句。
USE [employer]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE PROCEDURE [dbo].[myprocedure]
@姓名 varchar(50)
AS
BEGIN
select * from [员工信息表] where convert(nvarchar(50),姓名)=@姓名
END
在程序代码中更改objcmd = New SqlClient.SqlCommand(strsql,objConn)为GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE PROCEDURE [dbo].[myprocedure]
@姓名 varchar(50)
AS
BEGIN
select * from [员工信息表] where convert(nvarchar(50),姓名)=@姓名
END
objcmd = New SqlClient.SqlCommand("myprocedure", objConn)
objcmd.CommandType = CommandType.StoredProcedure
objcmd.CommandType = CommandType.StoredProcedure