SQL Server 2005存储过程错误

时间:2012-10-07 08:44:35

标签: sql-server-2005

我在SQL Server 2005中为员工详细信息创建了一个insert命令的存储过程,其中一个参数是我在表中使用varbinary作为数据类型的图像。

但是当我在存储过程中添加该参数时,我收到以下错误 -

  

从数据类型varchar到varbinary的隐式转换不是   允许。使用CONVERT函数运行此查询。

存储过程:

( 
    @Employee_ID nvarchar(10)='', 
    @Password nvarchar(10)='', 
    @Security_Question nvarchar(50)='', 
    @Answer nvarchar(50)='', 
    @First_Name nvarchar(20)='',
    @Middle_Name nvarchar(20)='', 
    @Last_Name nvarchar(20)='', 
    @Employee_Type nvarchar(15)='', 
    @Department nvarchar(15)='', 
    @Photo varbinary(50)='' 
)

insert into Registration
(
      Employee_ID,
      Password,      
      Security_Question,
      Answer,
      First_Name,
      Middle_Name,
      Last_Name,
      Employee_Type,
      Department,     
      Photo     
)
values
(
      @Employee_ID,
      @Password,     
      @Security_Question,
      @Answer,
      @First_Name,
      @Middle_Name,
      @Last_Name,
      @Employee_Type,
      @Department,      
      @Photo   
     )

表格结构:

Column Name        Data Type                 Allow Nulls
Employee_ID    nvarchar(10)             Unchecked
Password       nvarchar(10)              Checked
Security_Question   nvarchar(50)         Checked
Answer             nvarchar(50)              Checked
First_Name     nvarchar(20)              Checked
Middle_Name    nvarchar(20)              Checked
Last_Name      nvarchar(20)              Checked
Employee_Type      nvarchar(15)              Checked
Department     nvarchar(15)              Checked
Photo              varbinary(50)         Checked

vb.net中用于调用存储过程的代码 - >

Public Function Submit(ByVal obj As UserData,ByVal opt As String)As Boolean

    Using cnn As New SqlConnection(conn)
        Using cmd As New SqlCommand
            cmd.Connection = cnn
            If opt = "Submit" Then
                cmd.CommandText = "sp_emp_Registration"
            End If

            cmd.CommandType = CommandType.StoredProcedure
            cmd.Parameters.Add(New SqlParameter("@Employee_ID", obj.EmpID))
            cmd.Parameters.Add(New SqlParameter("@Password", obj.Pwd))
            cmd.Parameters.Add(New SqlParameter("@Security_Question", obj.SecQues))
            cmd.Parameters.Add(New SqlParameter("@Answer", obj.Ans))
            cmd.Parameters.Add(New SqlParameter("@First_Name", obj.Firstname))
            cmd.Parameters.Add(New SqlParameter("@Middle_Name", obj.Middlename))
            cmd.Parameters.Add(New SqlParameter("@Last_Name", obj.Lastname))
            cmd.Parameters.Add(New SqlParameter("@Employee_Type", obj.EmpType))
            cmd.Parameters.Add(New SqlParameter("@Department", obj.dept))                
            cmd.Parameters.Add(New SqlParameter("@Photo", obj.photo))

            cnn.Open()
            Try
                If (cmd.ExecuteNonQuery() > 0) Then
                    cnn.Close()
                    Return True
                Else
                    Return False
                End If
            Catch ex As Exception
                Return False
            End Try
        End Using
    End Using
End Function

我不知道该做什么。有人能给我一些建议或解决方案吗? 提前谢谢。

2 个答案:

答案 0 :(得分:1)

将字符串指定给varbinary作为默认值。此操作不执行隐式转换。为避免错误:

更改行:

@Photo varbinary(50)='' 

由:

@Photo varbinary(50)

如果某些行没有Photo值,则应将table列更改为允许空值

答案 1 :(得分:0)

问题是@Photo varbinary(50)=''。在该语句中,您将varbinary变量设置为字符串值,即=''。别这么做。