调用的时候,输入SQL 连接字符串, 表名,就能把数据导入到SQL, 基本功能和通过SQL2000 企业管理器导入EXCEL 到数据库差不多。
用OLEDB进行Excel文件数据的读取,并返回DataSet数据集。其中有几点需要注意的:
对于Excel 97以上版本都用Excel 8.0
4,Excel中的数据格式,必须要和SQL 表中的数据格式一样。
namespace ExceltoSql
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
openFileDialog1.ShowDialog();
this.textBox1.Text = openFileDialog1.FileName;
}
private void button3_Click(object sender, EventArgs e)
{
DataSet ds = ExcelToDataSet(this.textBox1.Text.Trim());
this.dataGridView1.DataSource = ds.Tables[0];
}
private DataSet ExcelToDataSet(string opnFileName)
{
string strConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + opnFileName + ";Extended Properties=\"Excel 8.0;HDR=YES;IMEX=1\"";
OleDbConnection conn = new OleDbConnection(strConn);
string strExcel = "";
OleDbDataAdapter myCommand = null;
DataSet ds = new DataSet();
strExcel = "select * from [sheet1$]";
try
{
conn.Open();
myCommand = new OleDbDataAdapter(strExcel, strConn);
myCommand.Fill(ds, "dtSource");
return ds;
}
catch (Exception ex)
{
MessageBox.Show("导入出错:" + ex, "错误信息");
return ds;
}
finally
{
conn.Close();
conn.Dispose();
}
}
private void button2_Click(object sender, EventArgs e)
{
try
{
DataSet ds = ExcelToDataSet(this.textBox1.Text.Trim());
string insertsql = "";
int column = ds.Tables[0].Columns.Count;
for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
{
string sql = "insert into " + this.textBox3.Text + " values('";
string columnsql = "";
for (int j = 0; j < column - 1; j++)
{
columnsql += ds.Tables[0].Rows[i][j].ToString().Trim() + "','";
}
columnsql += ds.Tables[0].Rows[i][column - 1].ToString().Trim();
sql += columnsql + "')";
insertsql += sql + "\r\n";
}
if (insertsql != "")
{
int k=SqlHelper.ExecuteNonQuery(this.textBox2.Text.Trim(), CommandType.Text, insertsql, null);
MessageBox.Show("导入数据库成功,共导入"+k+"条数据。");
}
this.dataGridView1.DataSource = ds.Tables[0];
}
catch (Exception ex)
{
MessageBox.Show("非法操作");
}
}
}
}