如何将字符串数据类型转换为SQL varbinary等效数据类型?

时间:2012-11-01 12:42:02

标签: c# sql-server type-conversion

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

目前正在使用OLEDB在c#中执行任务。方案是,我想插入一个表,其中包含用户名,密码等信息。数据库是SQL Server。 Pasword列的数据类型为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 个答案:

答案 0 :(得分:0)

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

看看this ...

答案 1 :(得分: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);

答案 2 :(得分: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(字符串名称,对象值)。

它运作正常。

感谢Khellang和ErenErsönmez的回应。

答案 3 :(得分:0)

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

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

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

仅供参考!