C# 如何将字符串数据类型转换为SQL';VARS二进制等效数据类型?

C# 如何将字符串数据类型转换为SQL';VARS二进制等效数据类型?,c#,sql-server,type-conversion,C#,Sql Server,Type Conversion,很抱歉问了个愚蠢的问题,因为我是C#的新手 目前正在使用OLEDB在c#中执行任务。场景是,我想在一个表中插入用户名、密码等信息。数据库是SQL Server。Pasword列的数据类型为varbinary(100) 我想从字符串数据类型转换为SQL的varbinary等效数据类型。我试了一点,但没有成功 最初我只是尝试使用reader.GetString(5)。但我得到的例外是: "Specified cast is not valid." *我忘了提到下面的事情了* 我使用的阅读器是Ole

很抱歉问了个愚蠢的问题,因为我是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);
(在这里,我从一个表中读取数据并插入另一个表。)

请帮帮我


谢谢。

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


看看…

您需要在应用程序和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);
我找到了解决办法

而不是写下面的代码行

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);
我没有为此字段指定数据类型,而是使用了constructor OleDbParameter(字符串名称、对象值)

而且效果很好


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

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

为了使其正常工作,该字段不能遇到任何空值

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

仅供参考