最近写一个简单的网页读取SQL Server数据库中的数据,并定时刷新的程序。不过坑爹的是甲方说数据库中的数据太大(数据每2分钟一组)不好拆分给我测试。后来程序写完了,我只能在我这边按照甲方给的数据库说明文档自己写了几个假数据进行测试,假数据毕竟不可能有花太多时间手动添加太多的数据,所以这种情况下程序的测试是很不靠谱,把程序配置到甲方的数据库中果然出问题了,真是坑爹,没有给我测试数据库,我又是最近才接触.NET的菜鸟,亚历山大。后来我就让他们把他们数据库中的数据复制一部分到EXCEL中给我,然后我再把EXCEL中的数据导到我自己的本地数据库上来测试我的网页程序,于是就有了将EXCEL中的数据导到数据库表中的需求。完成这项工作的时候终于发现了程序的BUG,原来是甲方给我的数据库说明文档中表名给错了,坑爹啊!不能给测试数据库,就给个说明文档,还有错误!!!
好了吐槽完了,言归正传。其实这个原理很简单,就是先用微软提供的OleDbConnection见excel中的数据读到DataSet数据集中来,然后将数据集中的数据插入到数据库中。
下面给出其中核心代码
下面这部分是读取EXCEL中的数据
string connStr
=
"Provider=Microsoft.Jet.OLEDB.4.0;"
+
"Data Source=" + excelFileName + ";" +
"Extended Properties=Excel 8.0;" ; //链接excel的语句,这里是2003版的语句,2007版是另一个可以在网上搜一下 excelFileName是要读取的excel文件路径
OleDbConnection connxls = new OleDbConnection (connStr );
// 查询语句,Sheet1指定的是哪个个sheet
string sql = "SELECT * FROM [Sheet1$]" ;
ds = new System.Data.DataSet ();
// 查询数据
OleDbDataAdapter da = new OleDbDataAdapter (sql , connxls );
try
{
da.Fill (ds );
}
catch (Exception ex )
{
MessageBox.Show ( "错误\n" + ex.ToString (), "!");
}
"Data Source=" + excelFileName + ";" +
"Extended Properties=Excel 8.0;" ; //链接excel的语句,这里是2003版的语句,2007版是另一个可以在网上搜一下 excelFileName是要读取的excel文件路径
OleDbConnection connxls = new OleDbConnection (connStr );
// 查询语句,Sheet1指定的是哪个个sheet
string sql = "SELECT * FROM [Sheet1$]" ;
ds = new System.Data.DataSet ();
// 查询数据
OleDbDataAdapter da = new OleDbDataAdapter (sql , connxls );
try
{
da.Fill (ds );
}
catch (Exception ex )
{
MessageBox.Show ( "错误\n" + ex.ToString (), "!");
}
这部分是将DataSet中的数据插入到数据库中
string connstr
=
"Data Source=.;Initial Catalog=test;User ID=sa;Password=123"
;
//连接数据库的字符串
SqlConnection objConn = new SqlConnection (connstr );
System.Data.SqlClient.SqlCommand sqlSelectCommand1 = new System.Data.SqlClient.SqlCommand ();
DataTable dt = ds.Tables [ 0] ;
sqlSelectCommand1.Connection = objConn ;
try
{
sqlSelectCommand1.Connection.Open ();
for ( int i = 0; i < dt.Rows.Count ; i ++)
{
string sqlstr = string.Format ( "insert into table1 (c1,c2,c3) values ('{0}','{1}','{2}')" , dt.Rows [i ][ 0] , dt.Rows [i ][ 1] , dt.Rows [i ][ 2] );
//插入的insert语句 c1 c2 c3 是数据在数据库中的列名 table1是表名
sqlSelectCommand1.CommandText = sqlstr ;
sqlSelectCommand1.ExecuteNonQuery ();
}
sqlSelectCommand1.Connection.Close ();
}
catch (Exception ex )
{
MessageBox.Show ( "错误\n" + ex.ToString (), "!" );
return ;
}
SqlConnection objConn = new SqlConnection (connstr );
System.Data.SqlClient.SqlCommand sqlSelectCommand1 = new System.Data.SqlClient.SqlCommand ();
DataTable dt = ds.Tables [ 0] ;
sqlSelectCommand1.Connection = objConn ;
try
{
sqlSelectCommand1.Connection.Open ();
for ( int i = 0; i < dt.Rows.Count ; i ++)
{
string sqlstr = string.Format ( "insert into table1 (c1,c2,c3) values ('{0}','{1}','{2}')" , dt.Rows [i ][ 0] , dt.Rows [i ][ 1] , dt.Rows [i ][ 2] );
//插入的insert语句 c1 c2 c3 是数据在数据库中的列名 table1是表名
sqlSelectCommand1.CommandText = sqlstr ;
sqlSelectCommand1.ExecuteNonQuery ();
}
sqlSelectCommand1.Connection.Close ();
}
catch (Exception ex )
{
MessageBox.Show ( "错误\n" + ex.ToString (), "!" );
return ;
}
本文介绍了如何使用C#从Excel文件中读取数据,并将其导入到SQL Server 2005数据库中。在实际操作中,由于缺乏测试数据,作者通过从甲方提供的部分数据库数据生成的Excel文件进行测试,发现并修复了程序中的错误。核心代码展示了读取Excel和插入数据库的过程。

3650

被折叠的 条评论
为什么被折叠?



