截断SQL Server二进制数据

本文关键字:数据 二进制 Server SQL 截断 | 更新日期: 2023-09-27 18:13:19

快速提问

在c#代码中,我们有这样的代码:

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

它正在查看的"DATA"看起来像这样:

0 x307832303230323032303230323032303230323032303332333033313330333133303332333933303338333033303330333033313230323032303230323032303230323032303230344334463534333132303230323032303230323032303230323032303230323032303230323032303230323032303230344535373331333033303332323032303230323032303230323032303230323032303230323032303330333033303330333033303330333333353330333033303330333233303331333133333336333235303330333033313533333033303332353333303330333133333331333135313230323032303230323032303230323032303230323032303230323032303230323032303230323032303230323032303230323032303230323032303230323032303230323032303230323032303230323032303230323032303230323032303230323032303230323032303230323032303230323032303230323032303230323032303230323032303230323034353538343134333534343135463535353334353532323033303334304430413230323032303230323032303230323032303230333233303331333133313332333233383330333833303330333033303331323032303230323032303230323032303230323034433446353433313230323032303230323032303230323032303230323032303230323032303230323032303230323034453537333133303330333232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323041

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

0 x53797344656d2e422974655e6g

任何想法?

edit:作为参考,插入'string '的insert语句的类型是' image ',它是从拉动的巨大的字符串相同的类型,所以它不应该是任何SQL截断数据类型的问题。

edit2: CODE AFTER SQL SELECT STATEMENT

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

所以Data是我们在。

截断SQL Server二进制数据

得到的值

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

所以,我有两个建议:

  1. 不将Data存储为字符串,而是将其存储为字节数组
  2. 在INSERT语句中使用参数将Data的值强类型化为二进制,这样SQL Server就不会进行任何转换。

那就解决了