参数化查询语句和parameter属性续

作者在 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()
经验总结:
一、在指定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)为
        objcmd = New SqlClient.SqlCommand("myprocedure", objConn)
        objcmd.CommandType = CommandType.StoredProcedure
VB.NET技术学习 | 阅读 1416 次
文章评论,共0条
游客请输入验证码
浏览95079次
最新评论