2013-08-11 22 views
9

Come posso aggiungere un valore nullo in un parametro tipo di dati varbinary?Valore null in un parametro tipo di dati varbinary

Quando eseguo il seguente codice:

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(); 
    } 
} 

ottengo il seguente System.Data.SqlClient.SqlException:

conversione implicita da tipo di dati nvarchar al varbinary (max) non è consentito. Utilizzare la funzione CONVERT per eseguire questa query.

+0

Ho una strategia po 'di rilevamento per affrontare casi nulli di 'byte []' 'lanciato come object' su un post correlati: http://stackoverflow.com/a/42905940/97964 – jocull

risposta

5

Si può provare qualcosa di simile: -

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

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

Grazie. A cosa serve -1? –

+0

È la lunghezza e SqlDbType.VarBinary con lunghezza -1 è l'equivalente di VARBINARY (MAX), almeno in teoria. ;) –

+0

Come sapevi che la lunghezza del tipo di dati è MAX? –

1

lo faccio come questo senza un problema

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

ma Parameters.Add è deprecato –

4

provare questo:

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

'Parameters.Add' è deprecato, questa risposta forse è meglio, solo la cosa da notare è che, non inserirà i dati' NULL' (nella tabella tu vedi la parola 'NULL') ma un dato' EMPTY' (nella tabella non vedrai nulla) –

+0

Questa è la soluzione migliore come affermato da Ronaldinho, grazie per la risposta Shamseer – Eliseo

+0

Come ha detto @RonaldinhoLearnCoding, è importante notare che ' byte [0] 'non è lo stesso di' null'. – jocull

6

non so il motivo per cui "DBNull.Value" non funziona per me. E immagino che un'altra soluzione possa risolvere questo problema.

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

Questo ha funzionato per me e si adattava al metodo helper che in precedenza inviava DBNull.Value se il valore byte [] era nullo. – jason

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

Mentre questa risposta può rispondere alla domanda aggiungendo qualche dettaglio in più come perché e come funziona, migliorerà la sua qualità – NathanOliver

-1

Situato valore nullo nella stored procedure. Non ha bisogno di fare altro.

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 
Problemi correlati