0

很抱歉问了愚蠢的问题,因为我是 C# 的新手。

目前正在使用 OLEDB 在 c# 中执行任务。场景是,我想插入一个包含用户名、密码等信息的表。数据库是 SQL Server。列密码具有数据类型 varbinary(100)。

我想从字符串数据类型转换为 SQL 的 varbinary 等效数据类型。我尝试了一点,但没有成功。

最初我只是尝试使用reader.GetString(5). 但我得到的例外是:

"Specified cast is not valid."

*我忘了在下面提到的事情*

我使用的阅读器是 OleDbDataReader。

oleParameter[7] = new OleDbParameter("@Password", OleDbType.VarBinary, 100);
oleParameter[7].Value = reader1.GetBytes(5);

(这里我从一个表中读取并插入到另一个表中。)

请帮我。

谢谢。

4

4 回答 4

0

您不能将二进制数据作为字符串读取,请使用该SqlDataReader.GetBytes方法。

看看这个...

于 2012-11-01T12:50:38.133 回答
0

您需要在应用程序和 varbinary 列之间发送/接收字节。取回字节数组后,可以将其转换为字符串:

var bytes = reader.GetBytes(5);
var myString = Encoding.UTF8.GetString(bytes); // use the same encoding used
                                               // to create the bytes
                                               // when saving to the DB.

要将字符串转换为字节数组:

var bytes = Encoding.UTF8.GetBytes(myString);
于 2012-11-01T12:54:42.980 回答
0

我得到了解决方案。

而不是编写下面的代码行,

oleParameter[7] = new OleDbParameter("@Password",  OleDbType.VarBinary, 100);
oleParameter[7].Value = reader1.GetBytes(5);

我只是尝试如下代码:

  byte[] array = (byte[])reader1.GetValue(9);
  oleParameter[7] = new OleDbParameter("@Password",array);

我没有指定该字段的数据类型,而是使用了构造函数 OleDbParameter(string name, object value)。

它工作正常。

感谢 Khellang 和 Eren Ersönmez 的回复。

于 2012-11-05T05:20:55.803 回答
0

我只是想解释一下为什么 reader.GetBytes(5) 不起作用。我自己以前也遇到过这个问题。

为了使其正常运行,该特定字段不能在其中遇到任何空值。

您可以在尝试执行 .GetBytes(5) 操作之前使用 IsDBNull(reader(5)) 语句测试该值。

仅供参考!

于 2013-07-22T17:16:29.087 回答