Deserialization from Varbinary field

I'm saving credit info to a varbinary field in SQL server and have no problem with serialization and saving.  However when I try to deserialize using the function below I get the following error at the getit.ExecuteNonQuery().  A stored proc retrieves the ccAuthorization field as an OUTPUT.

 " ex = {"Byte[][1]: the Size property has an invalid size of 0."}

 Does anyone have any suggestions for what I need to do to resolve?  Thanks in advance.


SqlCommand getit = new SqlCommand("sp_AssureBuyRetrieval", conn);
getit.CommandType = System.Data.CommandType.StoredProcedure;
getit.Parameters.Add("@ID", System.Data.SqlDbType.UniqueIdentifier).Value = id;
SqlParameter sqlParam = getit.Parameters.Add("@ccAuthorization", SqlDbType.VarBinary);
getit.Parameters["@ccAuthorization"].Direction = ParameterDirection.Output;
 
getit.ExecuteNonQuery();
 
string test = Convert.ToString(getit.Parameters["@ccAuthorization"].Value);
 
Byte[] returnValue = (Byte[])getit.Parameters["@ccAuthorization"].Value;
 
IFormatter formatter = new BinaryFormatter();
byte[] cereal = (Byte[])getit.Parameters["@ccAuthorization"].Value;
MemoryStream ccAuthorization = new MemoryStream(cereal);
ccAuthorization.Position = 0;
 
obj = (AssureBuyCCprocesser)formatter.Deserialize(ccAuthorization);
                ccAuthorization.Close();

Open in new window

abedeenfAsked:
Who is Participating?
 
Christopher KileCommented:
How about adding this:

getit.Parameters["@ccAuthorization"].Size = <size/length listed for this field in the sproc parameter description>;

Otherwise, the size of the parameter might BE zero.
0
 
abedeenfAuthor Commented:
Thanks for your suggestion.  I ended up using the following and it works!
   

         MemoryStream ccAuthorization = new MemoryStream();
            IFormatter formatter = new BinaryFormatter();

            try
            {

                formatter.Serialize(ccAuthorization, obj);
                byte[] dit = new byte[ccAuthorization.Length];

                ccAuthorization.Position = 0;
                ccAuthorization.Read(dit, 0, (int)ccAuthorization.Length);
                SqlCommand putit = new SqlCommand("sp_AssureBuyStorage", conn);
                putit.CommandType = System.Data.CommandType.StoredProcedure;
                putit.Parameters.Add("@ccAuthorization", System.Data.SqlDbType.VarBinary).Value = dit;
                putit.Parameters.Add("@ID", System.Data.SqlDbType.UniqueIdentifier).Value = this.id;
                putit.ExecuteNonQuery();
                ccAuthorization.Close();
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

All Courses

From novice to tech pro — start learning today.