1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > ASP.NET Excel导入到SQL Server数据库

ASP.NET Excel导入到SQL Server数据库

时间:2022-04-09 08:06:35

相关推荐

ASP.NET Excel导入到SQL Server数据库

提供把Excel里的数据导入到SQL Server 数据库,前提是Excel里的字段在Sql Server表里都有,不然会出现错误。注释很详细哦!要引用的命名空间是:

using System.Data.OleDb;

using System.Data.SqlClient;

Code

publicclassExcelToSQL

{

//stringSqlConnectionString="Server=(local);InitialCatalog=Test;IntegratedSecurity=True";

publicSqlConnectionsqlcon;//创建SQL连接

publicSqlCommandsqlcom;//创建SQL命令对象

publicExcelToSQL()

{

DataOperationdataOperation=newDataOperation();//用到平台的函数,就是初始化SqlConnection对象

DBUnitdbUnit=dataOperation.GetDbUnit();

sqlcon=(SqlConnection)t;

if(sqlcon.State.ToString()=="Open")

sqlcon.Close();

}

publicintImportSql(stringexcelPath,stringtableName)//导入的Excel的路径,数据库里的表名

{

if(!TableExist(tableName))//表名是否存在

return(int)ImportState.tableNameError;

DataTabledt=ExcelToDataTable(excelPath);

if (dt == null)

{

return (int)ImportState.excelFormatError;

}

ArrayListtableField=GetTableField(tableName);//表格的列名称

stringcolumnName="ID,";//Excel里的列名,增加一个ID列

for(inti=0;i<dt.Columns.Count;i++)

{

columnName+=dt.Columns[i].ColumnName+",";

stringcurrentColumn=dt.Columns[i].ToString().ToUpper();//当前列名

for(intj=0;j<tableField.Count;j++)

{

if(tableField[j].ToString().ToUpper()==dt.Columns[i].ToString().ToUpper())

break;//跳出本层和上一层循环,continue是跳出本层循环,如果用continue,会继续执行j++

//Excel里的字段必须在Sql中都有

if((tableField[j].ToString().ToUpper()!=dt.Columns[i].ToString().ToUpper())&&j==tableField.Count-1)

return(int)ImportState.fieldMatchError;

}

}

intm=columnName.LastIndexOf(',');

columnName=columnName.Remove(m);//移除最后一个逗号

sqlcom=newSqlCommand();

sqlcom.Connection=sqlcon;

sqlcon.Open();

mandType=CommandType.Text;

for(inth=0;h<dt.Rows.Count;h++)

{

stringvalue="'"+System.Guid.NewGuid().ToString()+"'"+",";

for(intk=0;k<dt.Columns.Count;k++)//根据列名得到值

{

value+="'"+dt.Rows[h][k].ToString()+"'"+",";

}

value=value.Remove(0,1);

intn=value.LastIndexOf(',');

value=value.Remove(n);//移除最后一个逗号

n=value.LastIndexOf("'");

value=value.Remove(n);

try

{

stringsql="insertinto"+tableName+"("+columnName+")values('"+value+"')";

mandText=sql;

stringsss=sqlcom.ExecuteNonQuery().ToString();

}

catch(Exceptionerr)

{

stringerroe=err.Message;

return(int)ImportState.dataTypeError;

}

}

sqlcon.Close();

sqlcom.Dispose();

return(int)ImportState.right;

}

publicDataTableExcelToDataTable(stringexcelPath)//把Excel里的数据转换为DataTable,并返回DataTable

{

string strCon = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + excelPath + ";Extended Properties='Excel 8.0;IMEX=1'";

System.Data.OleDb.OleDbConnection Conn = new System.Data.OleDb.OleDbConnection(strCon);

string strCom = "SELECT * FROM [Sheet1$]";

DataTable dt;

try

{

Conn.Open();

System.Data.OleDb.OleDbDataAdapter myCommand = new System.Data.OleDb.OleDbDataAdapter(strCom, Conn);

DataSet ds = new DataSet();

myCommand.Fill(ds, "[Sheet1$]");

Conn.Close();

dt = ds.Tables[0];

}

catch(Exception err)

{

return null;

}

return dt;

}

publicboolTableExist(stringtableName)//查看数据库里是否有此表名

{

sqlcom=newSqlCommand();

sqlcom.Connection=sqlcon;

mandType=CommandType.Text;

try

{

sqlcon.Open();

stringsql="selectnamefromsysobjectswheretype='u'";

mandText=sql;

SqlDataReadersqldr=sqlcom.ExecuteReader();

while(sqldr.Read())

{

if(sqldr.GetString(0).ToUpper()==tableName.ToUpper())

returntrue;

}

}

catch{returnfalse;}

finally

{

sqlcon.Close();

}

returnfalse;

}

publicArrayListGetTableField(stringtableName)//得到数据库某一个表中的所有字段

{

ArrayListal=newArrayList();

sqlcom=newSqlCommand();

sqlcom.Connection=sqlcon;

mandType=CommandType.Text;

try

{

sqlcon.Open();

stringsql="SELECTb.nameFROMsysobjectsaINNERJOINsyscolumnsbONa.id=b.idWHERE(a.name='"+tableName+"')";

mandText=sql;

SqlDataReadersqldr=sqlcom.ExecuteReader();

while(sqldr.Read())

{

al.Add(sqldr.GetString(0));

}

}

finally

{

sqlcon.Close();

}

returnal;//返回的是表中的字段

}

publicenumImportState

{

right=1,//成功

tableNameError=2,//表名不存在

fieldMatchError=3,//excel里的字段和数据库表里的字段不匹配

dataTypeError=4,//转换数据类型时发生错误

excelFormatError=5,//Excel格式不能读取

}

publicvoidAlert(stringstr)

{

HttpContext.Current.Response.Write("<scriptlanguage='javascript'>alert('"+str+"');</script>");

}

}

页面调用代码:

Code

protectedvoidbtnExport_Click(objectsender,EventArgse)

{

stringfilepath=this.fileUpload.PostedFile.FileName;

if(filepath!="")

{

if(this.txtTableName.Text!="")

{

if(filepath.Contains("xls"))

{

intresult=ets.ImportSql(filepath,this.txtTableName.Text);

if(result==(int)ExcelToSQL.ImportState.tableNameError)

ets.Alert("此表名在数据中不存在!");

else if(result==(int)ExcelToSQL.ImportState.excelFormatError)

ets.Alert("Excel格式不能正确读取!");

elseif(result==(int)ExcelToSQL.ImportState.fieldMatchError)

ets.Alert("Excel里的字段和SqlServer里的字段不匹配!");

elseif(result==(int)ExcelToSQL.ImportState.dataTypeError)

ets.Alert("转换数据类型时发生错误!");

elseif(result==(int)ExcelToSQL.ImportState.right)

{

ets.Alert("导入成功");

}

}

elseets.Alert("上传的文件类型必须为excel文件!");

}

elseets.Alert("表名不能为空!");

}

elseets.Alert("没有选择要上传的文件!");

}

前台代码:

Code

<formid="form1"runat="server">

<div>

<asp:LabelID="Label1"runat="server"Text="路径"></asp:Label>

&nbsp;<asp:FileUploadID="fileUpload"runat="server"Width="443px"/><br/>

<asp:LabelID="Label2"runat="server"Text="数据库表名称"></asp:Label>&nbsp;

<asp:TextBoxID="txtTableName"runat="server"></asp:TextBox><br/>

<asp:ButtonID="btnExport"runat="server"Text="导入到SQL"OnClick="btnExport_Click"/>

</div>

</form>

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。