爱程序网

C#实现MySQL数据库中的blob数据存储

来源: 阅读:

    在MySQL数据库中,有一种blob数据类型,用来存储文件。C#编程语言操作MySQL数据库需要使用MySQL官方组件MySQL.Data.dll。

    Mysql.Data.dll(6.9.6)组件下载地址:http://download.csdn.net/detail/keypig_zz/9262767

    现在说一说如何实现blob类型数据的操作。

    新建winform程序,添加两个按钮。代码如下:

 1 System.IO.MemoryStream ms = new System.IO.MemoryStream(); 2         private void button1_Click(object sender, EventArgs e) 3         { 4             //测试序列化与反序列化 5             int[] arr = { 1, 2, 3 }; 6             BinaryFormatter bFormatter = new BinaryFormatter(); 7             bFormatter.Serialize(ms, arr); 8             byte[] byteArr = ms.ToArray(); 9             MessageBox.Show(byteArr.Length.ToString());10             MySqlConnection conn = new MySqlConnection(Properties.Settings.Default.MySqlConnectString);11             //string insertStr = "update mm set aa=4,arr=@blobData where aa=4;";12             string insertStr = "insert into mm(arr) values(@blobData);";//需要主键设置自增13             MySqlParameter par=new MySqlParameter("@blobData",MySqlDbType.Blob);14             par.Value=byteArr;15             MySqlCommand cmd = new MySqlCommand(insertStr, conn);16             cmd.Parameters.Add(par);17             try18             {19                 conn.Open();20                 cmd.ExecuteNonQuery();21                 ms.Close();22                 ms.Dispose();23             }24             catch (Exception ep)25             {26                 MessageBox.Show(ep.Message);27             }28             29             30         }31 32         private void button2_Click(object sender, EventArgs e)33         {34             BinaryFormatter bFormatter = new BinaryFormatter();35             36             MySql.Data.MySqlClient.MySqlDataReader myData;37             MySqlConnection  conn = new MySql.Data.MySqlClient.MySqlConnection(Properties.Settings.Default.MySqlConnectString);38             string readStr = "select arr from mm where id =6;";39             MySqlCommand cmd = new MySqlCommand(readStr, conn);40             try41             {42                 conn.Open();43                 myData = cmd.ExecuteReader();44                 if (!myData.HasRows)45                 {46                     throw new Exception("没有blob数据");47                 }48                 myData.Read();49                 byte[] blob = new byte[myData.GetBytes(0, 0, null, 0, int.MaxValue)];50                 myData.GetBytes(0, 0, blob, 0, blob.Length);51                 myData.Close();52                 ms = new System.IO.MemoryStream(blob);53                 ms.Position = 0;54                 int[] arr = (int[])bFormatter.Deserialize(ms);55                 ms.Dispose();56                 string arrStr = null;57                 for (int i = 0; i < arr.GetLength(0); i++)58                 {59                     arrStr += arr[i].ToString()+" ";60                 }61                 MessageBox.Show(arrStr);62             }63             catch(Exception ep)64             {65                 MessageBox.Show(ep.Message);66             }67 68         }     

    代码中的连接字符串存储于Settings中,具体格式为:“server=127.0.0.1;user=root;database=***;port=3306;password=***;”。数据库中存在叫做mm的一个表格,含有一个id字段(主键,自增),一个arr字段(blob类型)。

    上述代码将一个整型数组{1,2,3}序列化之后以blob数据类型存储在MySQL数据库中,进一步,又从MySQL数据库中读取blob数据,进行反序列化,得到整型数组{1,2,3}。代码执行结果如下:

关于爱程序网 - 联系我们 - 广告服务 - 友情链接 - 网站地图 - 版权声明 - 人才招聘 - 帮助