2012-10-07 170 views
0

我已经在SQL Server 2005,其中的参数之一是针对我已经使用varbinary如表中的数据类型的图像创建的插入命令的一个存储过程对于员工详细信息..SQL Server 2005的存储过程错误

但是,当我加入这个参数在存储过程中我收到以下错误 -

Implicit conversion from data type varchar to varbinary is not allowed. Use the CONVERT function to run this query.

存储过程:

( 
    @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中调用存储程序 - >

公共功能提交(BYVAL OBJ时的UserData,选择BYVAL作为字符串)作为布尔

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 

我不知道该怎么办......任何人都可以给我一些建议或解决方案吗? 在此先感谢。

+1

你能提供SP吗?听起来像你已经创建了你的参数作为varchar而不是varbinary。 –

+0

没有我用VARBINARY only..following是SP – user1670625

+0

( 的Employee_ID为nvarchar(10)= '', 密码为nvarchar(10)= '', SECURITY_QUESTION为nvarchar(50)= '', 回答为nvarchar( 50)= '', 将First_Name为nvarchar(20)= '', Middle_Name为nvarchar(20)= '', LAST_NAME为nvarchar(20)= '', Employee_Type为nvarchar(15)= '', 部为nvarchar( 15)='', Photo varbinary(50)='' ) – user1670625

回答

1

您将一个字符串作为默认值分配给varbinary。此操作不执行隐式转换。为了避免错误:

更改行:

@Photo varbinary(50)='' 

由:

@Photo varbinary(50) 

如果你不具备某些行的照片价值,你应该改变表列允许空值

+0

谢谢你... :)它的工作..! – user1670625

0

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