截断SQL Server二进制数据

时间:2014-07-16 21:17:18

标签: c# sql sql-server

快速提问。

在C#代码中我们有类似的东西:

string SQL =
                    string.Format(
                        "SELECT DATA FROM DERP_DOC WHERE THING_ID = '{0}'",
                            thingId);
            string Data = dataHandler.ExecuteScalar(SQL);

" DATA"它看起来像这样:

  

0x30783230323032303230323032303230323032303230333233303331333033313330333233393330333833303330333033303331323032303230323032303230323032303230323034433446353433313230323032303230323032303230323032303230323032303230323032303230323032303230323034453537333133303330333232303230323032303230323032303230323032303230323032303230333033303330333033303330333033333335333033303330333033323330333133313333333633323530333033303331353333303330333235333330333033313333333133313531323032303230323032303230323032303230323032303230323032303230323032303230323032303230323032303230323032303230323032303230323032303230323032303230323032303230323032303230323032303230323032303230323032303230323032303230323032303230323032303230323032303230323032303230323032303230323032303435353834313433353434313546353535333435353232303330333430443041323032303230323032303230323032303230323033323330333133313331333233323338333033383330333033303330333132303230323032303230323032303230323032303443344635343331323032303230323032303230323 0323032303230323032303230323032303230323032303230323034453537333133303330333232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323041

然而,当我去数据库查看插入时。它得到了这样的东西:

0x53797344656D2E422974655E6G

有什么想法吗?

编辑:用于引用插入'字符串"的插入语句。属于"图像"它与那个巨大的字符串相同的类型,所以它不应该是任何sql截断数据类型问题。

edit2:SQL SELECT语句后的代码

        SQL =
            string.Format("INSERT INTO  WORK (DATE, TIME, LABEL, STATUS, " +
                          "ORDER, LNIT, SUBIT, ZONE, " +
                          "OPER, DATA, SEQ) " +
                          "VALUES ('{0}', '{1}', '{2}', '{3}', '{4}', " +
                          "'{5}', '{6}', '{7}', '{8}', '{9}', '{10}')",
date, time, "000", 0,
                        ordem, li, subli, zone,
                        strOp, Data, seq);

所以数据的价值正在被斩断。

1 个答案:

答案 0 :(得分:0)

几乎可以肯定是数据不匹配问题。您的ExecuteScalar函数返回一个二进制对象,但.NET会隐式地将其转换为字符串。然后,您直接将字符串插入SQL,并强制SQL Server将其从字符串转换回二进制文件。

所以,我提出两条建议:

  1. 不是将Data存储到字符串中,而是将其存储到字节数组中 或其他一些字节结构。
  2. 使用INSERT语句中的参数将数据值强类型化为二进制文件,以便SQL Server不进行任何转换。
  3. 那应该解决它。

相关问题