1、新建一个数据库,数据库名为Image,表名为image。并为表添加ID,tupian两个列。
2、新建一个项目(Photo),在工具箱中往窗体中拖入一个PictureBox控件,两个Button按钮,一个OpenFileDialog控件。并修改pictureBox1控件的属性BorderStyle为FixedSingle,SizeMode为StretchImage;修改两个button控件属性的Text值依次为”打开一张图片”“插入数据库”。
3、首先打开“数据“选择“添加新数据源”,然后(数据库)下一步,(数据集)下一步,选择”新建连接“,依次选择服务器名,服务器验证方式,选择”选择或输入一个数据库名。
4、选择”选择或输入一个数据库名,添加刚刚新建的数据库,然后点击“测试连接”,看看数据库连接是否成功。成功后点“确定”回到“数据源配置向导”页面,将“连接字符串复制下来。
5、添加两条using命名空间 using System.IO using System.Data.SqlClient作用为读取二进制数据流,用于数据库的连接。
6、编辑Button按钮“打开一张图片”的Click事件。
7、编写Button按钮“插入数据库:的Click事件。
向数据库中保存不同类型的文件,和在数据库中保存图片是一样的。就是向数据库以byte形式存入
向数据库中保存不同类型的文件,和在数据库中保存图片是一样的。就是向数据库以byte形式存入
然后就是写入数据库,代码如下:
FileInfo fi = new FileInfo( txtFileName.Text )// Replace with your file name
if ( fi.Exists
{
byte[] bData = null
int nNewFileID = 0
// Read file data into buffer
using ( FileStream fs = fi.OpenRead() )
{
bData = new byte[fi.Length]
int nReadLength = fs.Read( bData,0, (int)(fi.Length) )
}
// Add file info into DB
string strQuery = "INSERT INTO FileInfo "
+ " ( FileName, FullName, FileData ) "
+ " VALUES "
+ " ( @FileName, @FullName, @FileData ) "
+ " SELECT @@IDENTITY AS 'Identity'"
SqlCommand sqlComm = new SqlCommand( strQuery, sqlConn )
sqlComm.Parameters.Add( "@FileName", fi.Name )
sqlComm.Parameters.Add( "@FullName", fi.FullName )
sqlComm.Parameters.Add( "@FileData", bData )
// Get new file ID
SqlDataReader sqlReader = sqlComm.ExecuteReader()
if( sqlReader.Read() )
{
nNewFileID = int.Parse(sqlReader.GetValue(0).ToString())
}
sqlReader.Close()
sqlComm.Dispose()
if( nNewFileID >0 )
{
// Add new item in list view
ListViewItem itmNew = lsvFileInfo.Items.Add( fi.Name )
itmNew.Tag = nNewFileID
}
}
4.而读出的代码如下:
// Get new file name
string strFullName =
dlgFBSave.SelectedPath
if( strFullName[strFullName.Length - 1] != '//'
)
strFullName
+= @"/"
strFullName +=
lsvFileInfo.SelectedItems[0].Text
string strQuery = "SELECT FileData FROM FileInfo
"
+
" WHERE FileID = " + lsvFileInfo.SelectedItems[0].Tag.ToString()
SqlDataAdapter
sqlDAdapter = new SqlDataAdapter(strQuery,sqlConn)
DataSet
sqlRecordSet = new DataSet()
byte[] bData = null
//Get file data from DB
try
{
sqlDAdapter.Fill(
sqlRecordSet, "FileInfo" )
foreach( DataRow dr in sqlRecordSet.Tables["FileInfo"].Rows)
{
if( dr["FileData"] != DBNull.Value )
bData
= ( byte[] )dr["FileData"]
}
}
catch(SqlException sqlErr)
{
MessageBox.Show(
sqlErr.Message )
}
catch
{
MessageBox.Show(
"Failed to read data from DB!" )
}
sqlRecordSet.Dispose()
sqlDAdapter.Dispose()
if( bData != null )
{
// Save file
FileInfo
fi = new FileInfo( strFullName
)
if( !fi.Exists )
{
//Create the file.
using (FileStream fs = fi.Create())
{
fs.Write(
bData, 0, bData.Length)
}
}
else
{
//Create the file.
using (FileStream fs =
fi.OpenWrite())
{
fs.Write(
bData, 0, bData.Length)
}
}
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)