本文转自:http://www.cnblogs.com/lhking/archive/2009/06/08/1499002.html

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

 public class ExcelToSQL
{
//string SqlConnectionString = "Server=(local);Initial Catalog=Test;Integrated Security=True";
public SqlConnection sqlcon; //创建SQL连接
public SqlCommand sqlcom; //创建SQL命令对象 public ExcelToSQL()
{
DataOperation dataOperation = new DataOperation(); //用到平台的函数,就是初始化SqlConnection对象
DBUnit dbUnit = dataOperation.GetDbUnit();
sqlcon = (SqlConnection)dbUnit.cnt;
if (sqlcon.State.ToString() == "Open")
sqlcon.Close();
}
public int ImportSql(string excelPath, string tableName) //导入的Excel的路径,数据库里的表名
{
if (!TableExist(tableName)) //表名是否存在
return (int)ImportState.tableNameError; DataTable dt = ExcelToDataTable(excelPath);
if (dt == null)
{
return (int)ImportState.excelFormatError;
}
ArrayList tableField = GetTableField(tableName); //表格的列名称 string columnName = "ID,"; //Excel里的列名,增加一个ID列
for (int i = ; i < dt.Columns.Count; i++)
{
columnName += dt.Columns[i].ColumnName + ",";
string currentColumn = dt.Columns[i].ToString().ToUpper(); //当前列名
for (int j = ; 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 - )
return (int)ImportState.fieldMatchError;
}
}
int m = columnName.LastIndexOf(',');
columnName = columnName.Remove(m); //移除最后一个逗号 sqlcom = new SqlCommand();
sqlcom.Connection = sqlcon;
sqlcon.Open();
sqlcom.CommandType = CommandType.Text; for (int h = ; h < dt.Rows.Count; h++)
{
string value = "'" + System.Guid.NewGuid().ToString() + "'" + ",";
for (int k = ; k < dt.Columns.Count; k++) //根据列名得到值
{
value += "'" + dt.Rows[h][k].ToString() + "'" + ",";
}
value = value.Remove(, );
int n = value.LastIndexOf(',');
value = value.Remove(n); //移除最后一个逗号
n = value.LastIndexOf("'");
value = value.Remove(n); try
{
string sql = "insert into " + tableName + "(" + columnName + ") values('" + value + "')";
sqlcom.CommandText = sql;
string sss = sqlcom.ExecuteNonQuery().ToString();
}
catch (Exception err)
{
string erroe = err.Message;
return (int)ImportState.dataTypeError;
}
}
sqlcon.Close();
sqlcom.Dispose(); return (int)ImportState.right;
}
public DataTable ExcelToDataTable(string excelPath) //把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[];
}
catch(Exception err)
{
return null;
}
return dt;
}
public bool TableExist(string tableName) //查看数据库里是否有此表名
{
sqlcom = new SqlCommand();
sqlcom.Connection = sqlcon;
sqlcom.CommandType = CommandType.Text;
try
{
sqlcon.Open();
string sql = "select name from sysobjects where type='u'";
sqlcom.CommandText = sql;
SqlDataReader sqldr = sqlcom.ExecuteReader();
while (sqldr.Read())
{
if (sqldr.GetString().ToUpper() == tableName.ToUpper())
return true;
}
}
catch { return false; }
finally
{
sqlcon.Close();
}
return false;
}
public ArrayList GetTableField(string tableName) //得到数据库某一个表中的所有字段
{
ArrayList al = new ArrayList();
sqlcom = new SqlCommand();
sqlcom.Connection = sqlcon;
sqlcom.CommandType = CommandType.Text;
try
{
sqlcon.Open();
string sql = "SELECT b.name FROM sysobjects a INNER JOIN syscolumns b ON a.id = b.id WHERE (a.name = '" + tableName + "')";
sqlcom.CommandText = sql;
SqlDataReader sqldr = sqlcom.ExecuteReader();
while (sqldr.Read())
{
al.Add(sqldr.GetString());
}
}
finally
{
sqlcon.Close();
}
return al; //返回的是表中的字段
}
public enum ImportState
{
right = , //成功
tableNameError = ,//表名不存在
fieldMatchError = ,//excel里的字段和数据库表里的字段不匹配
dataTypeError = , //转换数据类型时发生错误
excelFormatError=,//Excel格式不能读取
}
public void Alert(string str)
{
HttpContext.Current.Response.Write("<script language='javascript'>alert('" + str + "');</script>");
}
}

页面调用:

  protected void btnExport_Click(object sender, EventArgs e)
{
string filepath = this.fileUpload.PostedFile.FileName;
if (filepath != "")
{
if (this.txtTableName.Text != "")
{
if (filepath.Contains("xls"))
{
int result = ets.ImportSql(filepath, this.txtTableName.Text); if (result == (int)ExcelToSQL.ImportState.tableNameError)
ets.Alert("此表名在数据中不存在!");
else if(result==(int)ExcelToSQL.ImportState.excelFormatError)
ets.Alert("Excel格式不能正确读取!");
else if (result == (int)ExcelToSQL.ImportState.fieldMatchError)
ets.Alert("Excel里的字段和Sql Server里的字段不匹配!");
else if(result==(int)ExcelToSQL.ImportState.dataTypeError)
ets.Alert("转换数据类型时发生错误!");
else if (result == (int)ExcelToSQL.ImportState.right)
{
ets.Alert("导入成功");
}
}
else ets.Alert("上传的文件类型必须为excel文件!");
}
else ets.Alert("表名不能为空!");
}
else ets.Alert("没有选择要上传的文件!");
}

前台代码:

  <form id="form1" runat="server">
<div>
<asp:Label ID="Label1" runat="server" Text="路径"></asp:Label>
&nbsp;<asp:FileUpload ID="fileUpload" runat="server" Width="443px" /><br />
<asp:Label ID="Label2" runat="server" Text="数据库表名称"></asp:Label>&nbsp;
<asp:TextBox ID="txtTableName" runat="server"></asp:TextBox><br />
<asp:Button ID="btnExport" runat="server" Text="导入到SQL" OnClick="btnExport_Click" />
</div>
</form>

ASP.NET Excel导入到SQL Server数据库的更多相关文章

  1. SQL server 导入数据 (excel导入到SQL server数据库)

    打开数据库SQL server ,右键数据库,任务,导入数据 点击下一步 选择数据源类型 选择路径,点击下一步 选择将要生成的类型 选择登陆方式 选中,点击下一步 点击编辑映射可以修改将要生成的表,点 ...

  2. 解决将Excel表导入到SQL Server数据库时出现Text was truncated or one or more characters had no match in the target code错误

    编写python爬虫程序可以在电商.旅游等网站上爬取相关评论数据,这些数据可以用于词云制作.感情词分析.提取关键词等,也可以将爬取下来的数据以自己的方式进行展示.评论数据爬取下来后,就要考虑怎样入库, ...

  3. 图解如何 将Excel里的数据导入到sql server数据库中

    项目中,经常会碰到如何将Excel里的数据导入到sql server中的问题. 下面,图解如何实现导入Excel中的数据到sql server 2008 R2: Excel截图如下: 查询pub数据库 ...

  4. MVC3学习:将excel文件导入到sql server数据库

    思路: 1.将excel文件导入到服务器中. 2.读取excel文件,转换成dataset. 3.循环将dataset数据插入到数据库中. 本例子使用的表格为一个友情链接表F_Link(LinkId, ...

  5. Excel导入MS SQL SERVER 操作

    关于Excel导入到sql操作的相关问题总结: 一.大批量数据导入 方法1.从Excel大批量数据导入时我们可以使用sql里面有一个batch copy的功能 方法2.在sql中建一个table ty ...

  6. 将文件导入到SQL server数据库表中的字段中

    一.在要执行的sql server数据库a中执行如下脚本,创建存储过程sp_textcopy /* 将二进制文件导入.导出到数据库相应字段列中 */ CREATE PROCEDURE sp_textc ...

  7. 如何把EXCEL数据导入到SQL SERVER数据库中 (转)

    转:http://blog.csdn.net/jjp837661103/article/details/13509889 在我们完成一个项目开发之后,通常我们需要把客户的很多数据导入到数据库中,面对大 ...

  8. MySql的数据导入到Sql Server数据库中

    步骤一:安装MySql驱动 驱动下载链接:https://dev.mysql.com/downloads/connector/odbc/ 下载完成后安装, 一路Next即可 步骤二:创建DSN DSN ...

  9. 将CSV文件中的数据导入到SQL Server 数据库中

    导入数据时,需要注意 CSV 文件中的数据是否包含逗号以及双引号,存在时,导入会失败 选择数据库 -> 右键 -> 任务 -> 导入数据 ,然后根据弹出的导入导出向导(如下图)中的提 ...

随机推荐

  1. USB设备在连接PC时的reset从何而来?

    近期在做烧写工具的优化工作,有一些关于USB的内容须要总结一下当中包含设备的初始化过程和枚举过程. 在枚举的过程中,设备会一直等PC端的状态,当等到reset命令时会对设备进行又一次枚举.可是这个re ...

  2. leetcode第一刷_Construct Binary Tree from Inorder and Postorder Traversal

    这道题是为数不多的感觉在读本科的时候见过的问题. 人工构造的过程是如何呢.兴许遍历最后一个节点一定是整棵树的根节点.从中序遍历中查找到这个元素,就能够把树分为两颗子树,这个元素左側的递归构造左子树,右 ...

  3. 在Windows Server 2008 R2 中架设 SMTP 服务器

    安装SMTP服务器 Step 1 在功能里面勾选SMTP 服务器,一路下一步完成安装 Step 2 在IIS6的SMTP属性里面的访问标签点击连接,然后设置本机可访问. (其实可以不用设置) Step ...

  4. C# Best Practices - Specify Clear Method Parameters

    Improve parameters parameter order public OperationResult PlaceOrder(Product product, int quantity, ...

  5. Java之对象序列化和反序列化

    一.对象序列化和反序列化存在的意义: 当你创建对象,只要你需要,他就一直存在,但当程序结束,对象就会消失,但是存在某种情况,如何让程序在不允许的状态,仍然保持该对象的信息.并在下次程序运行的时候使用该 ...

  6. NOIP2014解题报告

    day 1 1.生活大爆炸版石头剪刀布(rps) 直接按照题意模拟即可 #include<cstdio> #include<algorithm> #include<cst ...

  7. BZOJ 1677: [Usaco2005 Jan]Sumsets 求和( dp )

    完全背包.. --------------------------------------------------------------------------------------- #incl ...

  8. php随笔7-thinkphp OA系统 JS 文本框输入实时控制字数

    JS: //多行文本输入框剩余字数计算 function checkMaxInput(obj, maxLen) { if (obj == null || obj == undefined || obj ...

  9. django 基础入门(二)

    一.关于数据库 1.首先django 1.9以上等版本不支持pymysql,因此需要做一些调整. 比如在settings.py 加入一段代码: import pymysql pymysql.insta ...

  10. 【甘道夫】使用HIVE SQL实现推荐系统数据补全

    需求 在推荐系统场景中,假设基础行为数据太少,或者过于稀疏,通过推荐算法计算得出的推荐结果非常可能达不到要求的数量. 比方,希望针对每一个item或user推荐20个item,可是通过计算仅仅得到8个 ...