日期:2014-05-20  浏览次数:21270 次

C#如何更新MySQL的BLOB字段
我找到一些代码,但不好用,不懂C#,所以来这里请教大家了!
C# code

  SqlConnection conn =null;

  SqlCommand cmd = null;

  SqlParameter param = null;

  FileStream fs = null;

  const string sConn = "server=(local);Initial

  Catalog=Northwind;UID=ctester;PWD=password";

  try {

        conn = new SqlConnection(sConn);

        cmd = new SqlCommand("UPDATE Categories SET Picture = ?Picture WHERE

        CategoryName = 'Seafood'", conn);

        fs = new FileStream("c:\\Builder.doc", FileMode.Open, FileAccess.Read);

        Byte[] blob = new Byte[fs.Length];

        fs.Read(blob, 0, blob.Length);

        fs.Close();

        param = new SqlParameter("Picture", SqlDbType.VarBinary, blob.Length,

        ParameterDirection.Input, false, 0, 0, null, DataRowVersion.Current, blob);

        cmd.Parameters.Add(param);

        conn.Open();

        cmd.ExecuteNonQuery();

  } catch (SqlException e){

      Console.Write("SQL Exception: " + e.Message());

  } catch (Exception e) {

      Console.Write("Exception: " e.Message());

  }


实际上,就是如何将一个 byte[] 更新到mysql的BLOB上面,不是Insert 是 update 操作!



------解决方案--------------------
C# code

cmd = new SqlCommand("UPDATE Categories SET Picture =@Picture Picture WHERE


new SqlParameter("Picture", byte[])

------解决方案--------------------
SqlConnection conn =null;//连接字符串来用的

  SqlCommand cmd = null; //执行SQL语句

  SqlParameter param = null;//传参数来用的

  FileStream fs = null;//文件流

  const string sConn = "server=(local);Initial

  Catalog=Northwind;UID=ctester;PWD=password";//SQL的连接字符串

  try {

conn = new SqlConnection(sConn);//实利化连接字符串

cmd = new SqlCommand("UPDATE Categories SET Picture = ?Picture WHERE

CategoryName = 'Seafood'", conn);//SQL语句

fs = new FileStream("c:\\Builder.doc", FileMode.Open, FileAccess.Read);//用文件流读取c:\\Builder.doc

Byte[] blob = new Byte[fs.Length];//一个Byte数组

fs.Read(blob, 0, blob.Length);//读取文件流

fs.Close();//关闭文件流

param = new SqlParameter("Picture", SqlDbType.VarBinary, blob.Length,

ParameterDirection.Input, false, 0, 0, null, DataRowVersion.Current, blob);//传入的参数

cmd.Parameters.Add(param);//添加到数据库里面

conn.Open();//关闭数据库连接

cmd.ExecuteNonQuery();//反回受影响行数

  } catch (SqlException e){

   Console.Write("SQL Exception: " + e.Message());//异常

  } catch (Exception e) {

   Console.Write("Exception: " e.Message());//异常

  }

------解决方案--------------------
MySQL/MSSQL?
如果文件比较大的话,需要循环读取文件内容,。
MSSQL下面是:
UPDATETEXT { table_name.dest_column_name dest_text_ptr }
{ NULL | insert_offset }
{ NULL | delete_length }
[ WITH LOG ]
[ inserted_data
| { table_name.src_column_name src_text_ptr } ]

如果2005等较新的版本,用write 子 句的update.
USE AdventureWorks;
GO
DECLARE @MyTableVar table (
DocumentID int NOT NULL,
SummaryBefore nvarchar(max),
SummaryAfter nvarchar(max));
UPDATE Production.Document
SET DocumentSummary .WRITE (N'features',28,10)
OUTPUT INSERTED.DocumentID,
DELETED.DocumentSummary, 
INSERTED.DocumentSummary 
INTO @MyTableVar
WHERE DocumentID = 3 ;
SELECT DocumentID, SummaryBefore, SummaryAfter 
FROM @MyTableVar;
GO