c# 客户端 上传excel数据到sql,弄了一晚都弄不好
现在是 需要把一些xls文件上传到数据库并新建新表,表的列名结构不一样。该怎么做?我在网上搜了一晚,看到opendatasourse的方法挺好用的,可是网上都是直接在sqlserver操作的。
下面这个代码能实现吗?
BaseClass.SqlClass sqlclass = new HRP.BaseClass.SqlClass(); SqlConnection con = sqlclass.SqlConBind(); con.Open(); SqlCommand scd = new SqlCommand("SELECT * INTO NEWTABLE OPENROWSET('MICROSOFT.JET.OLEDB.4.0','Excel 8.0;HDR=YES;DATABASE=c:\a.xls',sheet1$)", con); scd.CommandTimeout = 20; scd.ExecuteNonQuery(); con.Close();
{
MessageBox.Show("请重新检查导入文件内容");
return;
}
}
catch(Exception ex)
{
MessageBox.Show(ex.Message) ;
this.Cursor=Cursors.Default;
}
}
else
{
System.Windows.Forms.Application.Exit();
}
this.Cursor=Cursors.Default;
}
加上用于访问数据库的类
using System;
using System.Data.SqlClient;
using System.Data;
using System.Windows.Forms;
namespace klose
{
/// <summary>
/// conndatabase 的摘要说明。
/// </summary>
public class conndatabase
{
private SqlConnection Connstr;
private SqlDataAdapter ConnAdapter;
private SqlCommand Strcommand;
string mConnString;
public conndatabase(string cserver,string cdatabase,string cuid,string cpwd)
{
//
// TODO: 在此处添加构造函数逻辑
//
Connstr=new SqlConnection();
mConnString="server="+cserver+";database="+cdatabase+";uid="+cuid+";pwd="+cpwd+"";
Connstr.ConnectionString=mConnString;
ConnAdapter=new SqlDataAdapter();
Strcommand=new SqlCommand();
}
public void Open()
{
try
{
if(Connstr.State != ConnectionState.Open)
Connstr.Open();
}
catch(System.Exception e)
{
throw new System.Exception("不能打开" + e.Message);
}
}
public bool ExecuteSql(string SQL)
{
try
{
if(Connstr.State!=ConnectionState.Open)
{
Connstr.Open();
}
Strcommand = Connstr.CreateCommand();
Strcommand.CommandText =SQL;
int i=Strcommand.ExecuteNonQuery();
Connstr.Close();
return true;
}
catch(System.Exception)
{
if(Connstr.State!=ConnectionState.Closed)
Connstr.Close();
return false;
}
}
public SqlDataReader ExecuteReaderSqls(string SQL)
{
try
{
if (Connstr.State !=ConnectionState.Open)
Connstr.Open();
SqlCommand sqlExectueCommand = new SqlCommand();
sqlExectueCommand.CommandText =SQL;
sqlExectueCommand.Connection = Connstr;
SqlDataReader myDataReader = sqlExectueCommand.ExecuteReader();
return myDataReader;
}
catch(System.Exception e)
{
if(Connstr.State!=ConnectionState.Closed)
Connstr.Close();
throw new SystemException("不能打开"+ e.Message);
}
}
public void close()
{
if (Connstr.State!=ConnectionState.Closed)
{
Connstr.Close();
}
}
}
}
你需要增加openfiledialog1,要分三部分,一部分是要打开EXCEL读取数据,还有一个就是访问数据库的类,再就是插入数据。
[解决办法]
如果数据库是SQL2005,SQL语句这样写
SELECT ROW_NUMBER() OVER (ORDER BY GETDATE()) AS ID, *, GETDATE() AS ACTDTTM INTO newtableFROM OPENDATASOURCE( 'MICROSOFT.JET.OLEDB.4.0','DATA SOURCE="C:\a.xls";USER ID=;PASSWORD=;EXTENDED PROPERTIES=EXCEL 8.0')...[SHEET1$]