1.採用stream流形式寫入:sql
#region 數據流轉換成blob類型數據寫入數據庫 static public bool StreamToBlob(ref Stream stream, OdbcConnection conn, string sTable, string sBlobField, string sIDName, string sIDValue) { if (null == conn || stream == null || sTable == "" || sBlobField == "" || sIDName == "" || sIDValue == "") throw new NullReferenceException(); DataSet dataSet = null; OdbcDataAdapter adapter = null; byte[] buff = null; DataRow row = null; int iRtn = 0; string sSQL = String.Format("SELECT * FROM {0} WHERE {1} = '{2}'", sTable, sIDName, sIDValue); try { adapter = new OdbcDataAdapter(sSQL, conn); adapter.MissingSchemaAction = MissingSchemaAction.AddWithKey; dataSet = new DataSet(sTable); OdbcCommandBuilder builder = new OdbcCommandBuilder(adapter); adapter.Fill(dataSet, sTable); // read blob data from stream // cause there is only one row, the index we need update is 0 int iCnt = dataSet.Tables[0].Rows.Count; row = dataSet.Tables[sTable].Rows[0]; buff = new byte[stream.Length]; stream.Seek(0, SeekOrigin.Begin); stream.Read(buff, 0, System.Convert.ToInt32(stream.Length)); // update table's blob field row[sBlobField] = buff; iRtn = adapter.Update(dataSet, sTable); } catch (Exception ee) { string err = ee.Message.ToString(); MessageBox.Show(ee.Message + ee.StackTrace); buff = null; } finally { if (dataSet != null) dataSet.Dispose(); if (adapter != null) adapter.Dispose(); } //stream.Close(); // there is an exception happened or update false if (buff == null || iRtn == 0) return false; return true; } #endregion
2.sql語句採用parameter數據庫
string image = BlobToString(DBConnection.m_DataBaseConn, "imagetable", "ImageData", "ImageID", readerIl[0].ToString()); if (image == null) { readerIl2.Close(); continue; } byte[] bytes = strhelper.str2arr(image); cmmandIr.CommandText = "update imagetable set imagedata = ? where imageid = '" + readerIl[0].ToString() + "'"; commandIr.Parameters.Add("@a", bytes); commandIr.ExecuteNonQuery();