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             try
18             {
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             try
41             {
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}。代码执行结果如下:

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM