繁体   English   中英

如何从SqlServer ASP.Net读取VarBinary数据

[英]How to read VarBinary Data from the SqlServer ASP.Net

我在SqlServer字段中有一个二进制数据(MyClass的对象),但是我无法检索二进制值并将其转换为My Class Object。 我已经使用以下代码写入数据库。

        conn = getConnection();
        MemoryStream memStream = new MemoryStream();
        StreamWriter sw = new StreamWriter(memStream);
        sw.Write(sql);
        SqlCommand sqlCmd = new SqlCommand(@"INSERT INTO PExercise(P_Enroll_No,P_Exercises,P_Date) VALUES (@VarEnroll,@VarBinary,@Date)", conn);
        sqlCmd.Parameters.Add("@VarEnroll",System.Data.SqlDbType.NVarChar,Int32.MaxValue);
        sqlCmd.Parameters["@VarEnroll"].Value = sql.getEnrollNo();
        sqlCmd.Parameters.Add("@VarBinary", System.Data.SqlDbType.VarBinary, Int32.MaxValue);
        sqlCmd.Parameters["@VarBinary"].Value = memStream.GetBuffer();
        sqlCmd.Parameters.Add("@Date",System.Data.SqlDbType.NVarChar,Int32.MaxValue);
        sqlCmd.Parameters["@Date"].Value = date;

        int success = sqlCmd.ExecuteNonQuery();
        closeConnection();

这段代码成功地将我的数据写入表中。 我使用以下代码从数据库中读取它。 请帮助我的代码。

            conn = getConnection();
            SqlCommand sqlCmd = new SqlCommand(@"Select P_Exercises from PExercise where P_Enroll_No='" + enrollNo + "' AND P_Date='"+date+"'", conn);
            SqlDataReader dr = sqlCmd.ExecuteReader(System.Data.CommandBehavior.SequentialAccess);

            byte[] bytes = new byte[1024];
            long i = dr.GetBytes(0,0,bytes,0,1024*1024*8);


            System.Runtime.Serialization.Formatters.Binary.BinaryFormatter bf = new System.Runtime.Serialization.Formatters.Binary.BinaryFormatter();
            MemoryStream ms = new MemoryStream(bytes);
            ms.Position = 0;
            mc = (List<ExerciseDetails>)bf.Deserialize(ms);

我进行了很多搜索,但仍然没有运气。 上面的代码给我异常“无效的读取,没有数据”。 我也尝试过QueryManager来运行sql查询。 并且在那里工作正常。

您可以执行以下操作,在其中将ExecuteScaler安全地转换为字节数组。 顺便说一下,请确保使用using语句包装实现IDisposable的对象,以便将它们关闭并正确处理。

   using (var cn = _db.CreateConnection())
   using (var cm = cn.CreateTextCommand(sql))
   {
       cm.AddInParam("name", DbType.String, name);
       cn.Open();
       var data = cm.ExecuteScalar() as byte[];
       return data;
    }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM