很抱歉因为我是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);
(这里我从一张桌子上读到并插入另一张桌子。)
请帮帮我。
感谢。
答案 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))语句测试该值。
仅供参考!