用c#如何操作BLOB字段..

xfeng1982 2011-11-01 10:59:28
我后台是通过Firebird连接的Interbase数据库,现在Insert、Update、delete都没问题,但唯一的就是不能写入BLOB字段值,或者更新BLOB字段值..

网上大部分的办法是流方式,或者二进制转换,但都是以文件或者图片为例...

我现在想把Textbox.Text的内容存入 BLOB字段里面,找了好多天资料一直没有好的办法,希望各位达人给解决一下..

现在数据连接都没问题,只是不知道该如何插入BLOB的值,或者说,如何Update这个BLOB字段的值...

...全文
957 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
ttn2000 2012-03-29
  • 打赏
  • 举报
回复
烦躁啊,这个Blob类型弄得头大了
xfeng1982 2011-11-02
  • 打赏
  • 举报
回复
非常 感谢8楼的方法,也使我把问题解决了,非常 感谢。分都给你了...

另外也非常 感谢各位的帮忙...非常感谢..
山东蓝鸟贵薪 2011-11-02
  • 打赏
  • 举报
回复
帮你顶顶帖子,学习一下

sdl2005lyx 2011-11-02
  • 打赏
  • 举报
回复
由于你用的是OdbcConnection ,那个类型也需要改成相应类型的:

cmd.Parameters.Add("@summary", OdbcType.Image).Value = myData;
xfeng1982 2011-11-01
  • 打赏
  • 举报
回复
有知道的帮帮忙,谢了....
xfeng1982 2011-11-01
  • 打赏
  • 举报
回复
这个Interbase数据库是我们很老的一个业务系统,现在还不能全部更新,只能过渡一下,有些功能,我想通过c#去实现,一些简单的查询,,添加,更新之类的,这个Interbase库里面有一个表的字段就是BLOB...

哎...直接Update或者Insert都提示下面的错误,真不知道如何去修改了.

update customer set SUMMARY='sdfdsfdfssfddfdfssfd' where CUSTID='12221121'

ERROR [HY000] [ODBC Firebird Driver][Firebird]conversion error from string "BLOB"

---->这个SUMMARY字段就是BLOB类型的...愁人...
熙风 2011-11-01
  • 打赏
  • 举报
回复
BLOB
好像clob 要好操作些
黄亮 2011-11-01
  • 打赏
  • 举报
回复
参数形式用byte[]
阿非 2011-11-01
  • 打赏
  • 举报
回复
采用参数化的方式 进行增加和修改

参数类型 System.Data.SqlDbType.Binary
xfreyes 2011-11-01
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 sdl2005lyx 的回复:]
对于有二进制数组的字段,不要采用直接字符串拼接的方式,而要采用SqlParameter 参数传入:

C# code


OdbcConnection cn = new OdbcConnection("DSN=Testgdb;UID=SYSDBA;PWD=masterkey;");
try
{
//写入BLOB……
[/Quote]

同意,你拼接的方式myBlob会ToString成“byte[]”而不会以字节流的形式插入的
sdl2005lyx 2011-11-01
  • 打赏
  • 举报
回复
对于有二进制数组的字段,不要采用直接字符串拼接的方式,而要采用SqlParameter 参数传入:

OdbcConnection cn = new OdbcConnection("DSN=Testgdb;UID=SYSDBA;PWD=masterkey;");
try
{
//写入BLOB字段
byte[] myBlob = System.Text.Encoding.UTF8.GetBytes(TextBoxDetails.Text);
string myString = string.Format("update customer set SUMMARY= (@summary) where CUSTID='{0}' and SNAME='{1}'",TextBoxNo.Text , TextBoxCorp.Text);
cn.Open();
OdbcCommand cmd = new OdbcCommand(myString, cn);
cmd.Parameters.Add("@summary", SqlDbType.Image).Value = myData;

Response.Write(myString);
cmd.ExecuteNonQuery();
}
catch (OdbcException ex)
{ Response.Write(ex.Message); }
finally
{ cn.Close(); }
xfeng1982 2011-11-01
  • 打赏
  • 举报
回复
在线等高人帮忙....
xfeng1982 2011-11-01
  • 打赏
  • 举报
回复
我现在的代码如下:


OdbcConnection cn = new OdbcConnection("DSN=Testgdb;UID=SYSDBA;PWD=masterkey;");
try
{
//写入BLOB字段
byte[] myBlob = System.Text.Encoding.UTF8.GetBytes(TextBoxDetails.Text);
string myString = "update customer set SUMMARY='"+ myBlob +"' where CUSTID='" + TextBoxNo.Text + "' and SNAME='" + TextBoxCorp.Text + "' ";
cn.Open();
OdbcCommand cmd = new OdbcCommand(myString, cn);

Response.Write(myString);
cmd.ExecuteNonQuery();
}
catch (OdbcException ex)
{ Response.Write(ex.Message); }
finally
{ cn.Close(); }




提示错误如下:
update customer set SUMMARY='System.Byte[]' where CUSTID='12221121' and SNAME='22112'
---》上面这行是显示我的update语句。

下面是提示的错误:
ERROR [HY000] [ODBC Firebird Driver][Firebird]conversion error from string "BLOB"
xfeng1982 2011-11-01
  • 打赏
  • 举报
回复
谢谢,你给的代码...类似的代码,我在网上找到不少...

现在我想把Textbox的内容存到BLOB的字段里面去,不知道要怎么写了...希望高人给指点一二...


另外,谢谢4楼的回复...
sdl2005lyx 2011-11-01
  • 打赏
  • 举报
回复
给你一段实例:

Image img = Image.FromFile(@"c:\test.jpg");
MemoryStream ms = new MemoryStream();
img.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);

byte[] myData = ms.ToArray();
SqlConnection cn = new SqlConnection("Data Source=(local);Initial Catalog=utscadadb;Integrated Security=SSPI; User Id=sa;Password=ut2001;");
SqlCommand cmd = new SqlCommand("Update Table1 Set data = (@data) where id =3", cn);

cmd.Parameters.Add("@file ", SqlDbType.VarChar).Value = "d:\\test.jpg";
cmd.Parameters.Add("@data ", SqlDbType.Image).Value = myData;

cn.Open();
cmd.ExecuteNonQuery();
cn.Close();

110,539

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧