
格式如下
string
Sql
=
"Server
=
服务器名称;DataBase
=
数据库名;UID
=
用户名;
PWD
=
密码;
"
//然后创建一个SqlConnection的对象
并且把链接数据库的Sql
字符串变量作为参数
//这样就会调用SqlConnection类的参数为String类型的构造函数为你的Connct对象赋值
SqlConnection
Connct
=
new
SqlConnection(Sql);
然后你只需要
Connct.open()
就可以对数据库进行一些 *** 作
或者是绑定数据源
这个明显是WinForm的吧。1、新建数据库
USE [master]
GO
/****** Object: Database [数据库名]Script Date: 09/12/2014 16:56:48 ******/
CREATE DATABASE [数据库名] ON PRIMARY
( NAME = N'数据库名', FILENAME = N'D:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\DATA\数据库名.mdf' , SIZE = 80896KB , MAXSIZE = UNLIMITED, FILEGROWTH = 1024KB )
LOG ON
( NAME = N'数据库名_log', FILENAME = N'D:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\DATA\数据库名_log.LDF' , SIZE = 22144KB , MAXSIZE = UNLIMITED, FILEGROWTH = 10%)
GO
2、建立数据表
USE[数据库名]
GO
CREATE TABLE [个人信息] (
[ID] [int] IDENTITY (1, 1) NOT NULL,
[姓名] [nvarchar] (50) NOT NULL DEFAULT (''),
[性别] [nvarchar] (1) NOT NULL DEFAULT (''),
[年龄] [int] NOT NULL DEFAULT (0),
[籍贯] [nvarchar] (50) NOT NULL DEFAULT (''),
[所在地] [nvarchar] (4000) NOT NULL DEFAULT (''))
/****其它字段自行添加****/
ALTER TABLE [AccessList] WITH NOCHECK ADD CONSTRAINT [PK_个人信息] PRIMARY KEY NONCLUSTERED ( [ID] )
3、点击button后,确认添加个人信息时:
INSERT [个人信息] ([姓名],[性别],[年龄],[籍贯]) VALUES ( '"+ txtXM.Text.Trim()+"','"+cbxXB.Text.Trim()+"',"+ txtNL.Text.Trim()+",'"+txtJG.Text.Trim()+"')
SQL语句,尽量使用参数,避免SQL注入。
首先,在数据库中要建立相应的字段能保存Bytes,例如在SQL Server中用Image类型来定义字段。我所用到的数据库大致结构如下:字段名
类型
备注
FileID
Int
自增字段
FileName
Varchar(256)
FullName
Varchar(1024)
FileData
Image
然后就是写入数据库,代码如下:
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
}
}
而读出的代码如下:
// 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条)