2013-08-11 38 views
9

Làm thế nào tôi có thể thêm một giá trị null vào một kiểu dữ liệu varbinary parameter?Giá trị rỗng trong một kiểu dữ liệu varbinary parameter

Khi tôi thực hiện đoạn mã sau:

using (SqlConnection myDatabaseConnection1 = new SqlConnection(myConnectionString.ConnectionString)) 
{ 
    using (SqlCommand mySqlCommand = new SqlCommand("INSERT INTO Employee(EmpName, Image) Values(@EmpName, @Image)", myDatabaseConnection1)) 
    { 
     mySqlCommand.Parameters.AddWithValue("@EmpName", textBoxEmpName.Text); 
     mySqlCommand.Parameters.AddWithValue("@Image", DBNull.Value); 
     myDatabaseConnection1.Open(); 
     mySqlCommand.ExecuteNonQuery(); 
    } 
} 

tôi nhận được sau System.Data.SqlClient.SqlException:

chuyển đổi ngầm từ kiểu dữ liệu nvarchar sang varbinary (max) không được phép. Sử dụng hàm CONVERT để chạy truy vấn này.

+0

Tôi có một chiến lược phát hiện chút để đối phó với trường hợp rỗng của 'byte []' đúc là 'object' trên một bài đăng liên quan: http://stackoverflow.com/a/42905940/97964 – jocull

Trả lời

5

Bạn có thể thử một cái gì đó như thế này: -

cmd.Parameters.Add("@Image", SqlDbType.VarBinary, -1); 

cmd.Parameters["@Image"].Value = DBNull.Value; 
+0

Cảm ơn. -1 là gì? –

+0

Đó là độ dài và SqlDbType.VarBinary với độ dài -1 là tương đương với VARBINARY (MAX), ít nhất là theo lý thuyết. ;) –

+0

Làm thế nào bạn biết chiều dài datatype là MAX? –

1

tôi làm điều đó như thế này mà không có một vấn đề

SqlParameter image= new SqlParameter("@Image", SqlDbType.VarBinary, System.DBNull.Value); 
mySqlCommand.Parameters.Add(image); 
+0

nhưng Parameters.Add bị phản đối –

4

thử điều này:

mySqlCommand.Parameters.AddWithValue("@Image", new byte[]{}); 
+3

'Parameters.Add' không được chấp nhận, câu trả lời này có thể tốt hơn, chỉ điều cần chú ý là, nó sẽ không chèn dữ liệu' NULL' (trong bảng bạn xem từ 'NULL') nhưng một dữ liệu' EMPTY' (trong bảng bạn sẽ không thấy gì cả) –

+0

Đây là giải pháp tốt nhất như đã nêu bởi Ronaldinho, cảm ơn câu trả lời Shamseer – Eliseo

+0

Như @RonaldinhoLearnCoding nói, điều quan trọng cần lưu ý là ' byte [0] 'không giống với' null'. – jocull

6

Tôi không biết lý do tại sao "DBNull.Value" không làm việc cho tôi. Và tôi tìm ra một giải pháp khác có thể giải quyết vấn đề này.

cmd.Parameters["@Image"].Value = System.Data.SqlTypes.SqlBinary.Null; 
+1

Điều này làm việc cho tôi và phù hợp với phương pháp trợ giúp mà trước đây đã gửi DBNull.Value nếu giá trị byte [] là null. – jason

2
sqlCommand.Parameters.AddWithValue("@image", SqlBinary.Null); 
+4

Trong khi câu trả lời này có thể trả lời câu hỏi thêm một số chi tiết khác như lý do tại sao và cách thức hoạt động của nó sẽ cải thiện chất lượng của nó – NathanOliver

-1

Đặt giá trị null trong Stored Procedure của bạn. Không cần phải làm gì khác.

ex. @photo varbinary(max) = null, 

ALTER PROCEDURE [dbo].[InsertOurTeam] 
    @name nvarchar(50), 
    @Sname nvarchar(50), 
    @designation nvarchar(50), 
    @photo varbinary(max) = null, 
    @Pname nvarchar(50)=null, 
    @psize bigint=null, 
    @id int output 
    AS 
    BEGIN 

     SET NOCOUNT ON; 
     insert into OurTeam values (@name,@Sname,@designation,@photo,@Pname,@psize); 

     select @id= SCOPE_IDENTITY(); 
END 
Các vấn đề liên quan