截断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是我们在。
这几乎肯定是数据不匹配的问题。你的ExecuteScalar函数返回一个二进制对象,但是。net隐式地将它转换为一个字符串。然后,您直接将字符串插入SQL中,并强制SQL Server将其从字符串转换回二进制。
所以,我有两个建议:
- 不将
Data
存储为字符串,而是将其存储为字节数组 - 在INSERT语句中使用参数将Data的值强类型化为二进制,这样SQL Server就不会进行任何转换。
那就解决了