0

varbinarySQL Server 2005で、従業員の詳細用の挿入コマンドのストアドプロシージャを作成しました。このプロシージャでは、パラメータの1つが、テーブルのデータ型として使用したイメージです。

しかし、ストアドプロシージャにそのパラメータを追加すると、次のエラーが発生します-

データ型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のコード->

パブリック関数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

私は何をすべきかわからない..誰かが私にいくつかの提案や解決策を与えることができますか?前もって感謝します。

4

2 に答える 2

1

デフォルト値として文字列をvarbinaryに割り当てます。この操作は暗黙のキャストを実行しません。エラーを回避するには:

行を変更します。

@Photo varbinary(50)='' 

に:

@Photo varbinary(50)

一部の行の写真の値がない場合は、テーブルの列を変更してnullを許可する必要があります。

于 2012-10-07T09:35:02.893 に答える
0

問題は@Photo varbinary(50)=''です。そのステートメントでは、varbinary変数を文字列値、つまり=''に設定しています。そうしないでください。

于 2012-10-07T09:35:24.040 に答える