2012-10-07 9 views
0

Я создал хранимую процедуру команды insert для данных сотрудника в SQL Server 2005, в которой одним из параметров является изображение, для которого я использовал varbinary в качестве типа данных в таблице.Ошибка хранимой процедуры SQL Server 2005

Но когда я добавляю этот параметр в хранимой процедуре я получаю следующее error-

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 для вызова хранимых procedure->

Public Function Отправить (ByVal OBJ Как UserData, ByVal неавтоматического 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 

Я не получая, что делать..может ли кто-нибудь дать мне какое-нибудь предложение или решение? Спасибо заранее.

+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) = '', Фото varbinary (50) = '' ) – user1670625

ответ

1

Вы назначаете строку varbinary в качестве значения по умолчанию. Эта операция не выполняет неявный перевод. Чтобы избежать ошибок:

Изменения линии:

@Photo varbinary(50)='' 

по:

@Photo varbinary(50) 

Если вы не имеете значения Фото для некоторых строк вы должны изменить столбец таблицы позволяют аннулируют.

+0

Спасибо, у ... :) Это сработало ..! – user1670625

0

Проблема @Photo varbinary(50)=''. В этом утверждении вы устанавливаете переменную varbinary в строковое значение, то есть = ''. Не делай этого.

Смежные вопросы