C#asp.net 将客户端的Excel数据导入到GridView和SQL数据库里(要完整正确代码) Vs2008 SQL2008 Office200

有加分

#region 连接Excel 读取Excel数据 并返回DataSet数据集合
/// <summary>
/// 连接Excel 读取Excel数据 并返回DataSet数据集合
/// </summary>
/// <param name="filepath">Excel服务器路径</param>
/// <param name="tableName">Excel表名称</param>
/// <returns></returns>
public static System.Data.DataSet ExcelSqlConnection(string filepath, string tableName)
{
string strCon = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + filepath + ";Extended Properties='Excel 8.0;HDR=YES;IMEX=1'";
OleDbConnection ExcelConn = new OleDbConnection(strCon);
try
{
string strCom = string.Format("SELECT * FROM [Sheet1$]");
ExcelConn.Open();
OleDbDataAdapter myCommand = new OleDbDataAdapter(strCom, ExcelConn);
DataSet ds = new DataSet();
myCommand.Fill(ds, "[" + tableName + "$]");
ExcelConn.Close();
return ds;
}
catch
{

ExcelConn.Close();
return null;
}
}
#endregion

#region 导入的execl
protected void Button2_Click(object sender, EventArgs e)
{
SqlConnection cn = new BSqlDataProvider().GetSqlConnection();
cn.Open();
if (FileUpload1.HasFile == false)//HasFile用来检查FileUpload是否有指定文件
{
Response.Write("<script>alert('请您选择Excel文件')</script> ");
return;//当无文件时,返回
}
string IsXls = System.IO.Path.GetExtension(FileUpload1.FileName).ToString().ToLower();//System.IO.Path.GetExtension获得文件的扩展名
if (IsXls != ".xls")
{
Response.Write("<script>alert('只可以选择Excel文件')</script>");
return;//当选择的不是Excel文件时,返回
}
string filename = FileUpload1.FileName; //获取Execle文件名 DateTime日期函数
string savePath = Server.MapPath(("~\\upfiles\\") + filename);//Server.MapPath 获得虚拟服务器相对路径
FileUpload1.SaveAs(savePath); //SaveAs 将上传的文件内容保存在服务器上
DataSet ds = ExcelSqlConnection(savePath, filename); //调用自定义方法
DataRow[] dr = ds.Tables[0].Select(); //定义一个DataRow数组
int rowsnum = ds.Tables[0].Rows.Count;
if (rowsnum == 0)
{
Response.Write("<script>alert('Excel表为空表,无数据!')</script>"); //当Excel表为空时,对用户进行提示
}
else
{
for (int i = 0; i < dr.Length; i++)
{
string spdm = dr[i]["商品代码"].ToString();//日期 excel列名【名称不能变,否则就会出错】
string jijie = dr[i]["季节"].ToString();
string boduan = dr[i]["波段"].ToString();
string s_chan = dr[i]["生产商"].ToString();
string f_shi = dr[i]["方式"].ToString();
string c_ku = dr[i]["仓库"].ToString();
string insertstr = "insert into AA_ANSD values('"+spdm+"','"+jijie+"','"+boduan+"','"+s_chan+"','"+f_shi+"','"+c_ku+"')";
SqlCommand cmd = new SqlCommand(insertstr, cn);
try
{
cmd.ExecuteNonQuery();
}
catch (MembershipCreateUserException ex) //捕捉异常
{
Response.Write("<script>alert('导入内容:" + ex.Message + "')</script>");
}

}
Response.Write("<script>alert('Excle表导入成功!');location='CMT_Entry.aspx?CMD=0'</script>");
}

cn.Close();

}
#endregion

快给分 啊
温馨提示:答案为网友推荐,仅供参考
第1个回答  2010-12-23
太难了 ,你可以先做身份证输入验证,这样就不会那样麻烦了,确保了输入的身份证号都是对的,否则通不过,通过验证后你要导入导出都很轻松
JS验证代码无偿给你
function checkIdcard(idcard){

var area=

var idcard,Y,JYM;
var S,M;
var idcard_array = new Array();
idcard_array = idcard.split("");
//地区检验
if(area[parseInt(idcard.substr(0,2))]==null) return 4;
//身份号码位数及格式检验
switch(idcard.length){
case 15:
if ( (parseInt(idcard.substr(6,2))+1900) % 4 == 0 || ((parseInt(idcard.substr(6,2))+1900) % 100 == 0 && (parseInt(idcard.substr(6,2))+1900) % 4 == 0 )){
ereg=/^[1-9][0-9][0-9]((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|[1-2][0-9]))[0-9]$/;//测试出生日期的合法性
} else {
ereg=/^[1-9][0-9][0-9]((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|1[0-9]|2[0-8]))[0-9]$/;//测试出生日期的合法性
}
if(ereg.test(idcard)) return 0;
else return 2;
break;
case 18:
//18位身份号码检测
//出生日期的合法性检查
//闰年月日:((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|[1-2][0-9]))
//平年月日:((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|1[0-9]|2[0-8]))
if ( parseInt(idcard.substr(6,4)) % 4 == 0 || (parseInt(idcard.substr(6,4)) % 100 == 0 && parseInt(idcard.substr(6,4))%4 == 0 )){
ereg=/^[1-9][0-9]19[0-9]((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|[1-2][0-9]))[0-9][0-9Xx]$/;//闰年出生日期的合法性正则表达式
} else {
ereg=/^[1-9][0-9]19[0-9]((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|1[0-9]|2[0-8]))[0-9][0-9Xx]$/;//平年出生日期的合法性正则表达式
}
if(ereg.test(idcard)){//测试出生日期的合法性
//计算校验位
S = (parseInt(idcard_array[0]) + parseInt(idcard_array[10])) * 7
+ (parseInt(idcard_array[1]) + parseInt(idcard_array[11])) * 9
+ (parseInt(idcard_array[2]) + parseInt(idcard_array[12])) * 10
+ (parseInt(idcard_array[3]) + parseInt(idcard_array[13])) * 5
+ (parseInt(idcard_array[4]) + parseInt(idcard_array[14])) * 8
+ (parseInt(idcard_array[5]) + parseInt(idcard_array[15])) * 4
+ (parseInt(idcard_array[6]) + parseInt(idcard_array[16])) * 2
+ parseInt(idcard_array[7]) * 1
+ parseInt(idcard_array[8]) * 6
+ parseInt(idcard_array[9]) * 3 ;
Y = S % 11;
M = "F";
JYM = "10X98765432";
M = JYM.substr(Y,1);//判断校验位
if(M == idcard_array[17]) return 0; //检测ID的校验位
else return 3;
}
else return 2;
break;
default:
return 1;
break;
}
}

function CheckForm()
{
var Errors=new Array(
"验证通过!",
"身份证号码位数不对!",
"身份证号码出生日期超出范围或含有非法字符!",
"身份证号码校验错误!",
"身份证地区非法!"
);
var result=checkIdcard(document.getElementById("txt_sfzmhm").value);
if(result!=0)
{
alert(Errors[result]);
document.getElementById("txt_sfzmhm").focus();
return false;
}
alert("输入正确!");
return true;
}

//================================================
//地区选择
function RemoveAllOption(obj)
{
var len = obj.length-1;
for(var i=len; i>=0; i--)
{
obj.options.remove(i);
}
}
function AddEmptyOption(obj)
{
obj.options.add(new Option("",""));
}
function FirstChangeOption1(ele,first,second,field)
{
RemoveAllOption(second);
second.options.add(new Option(first.options[first.selectedIndex].text,""));
var TempOptionStr;
var SkillCode = field.value;
var currentValue = first.value;
if (currentValue.length >= 2){
var arrValue = SkillCode.split(";");
for (var i=0;i<arrValue.length;i++){
var arrOneValue = arrValue[i].split(",");
if (currentValue.substr(0,2) == arrOneValue[0].substr(0,2)) { //查找到合适的项目
if( arrOneValue[0].length >2 && arrOneValue[0] != currentValue)
{
TempOptionStr= ' '+arrOneValue[1];
second.options.add(new Option(TempOptionStr,arrOneValue[0]));
}
}
}
}
if (second.options.length <= 1) {
second.style.display='none'; document.getElementById(ele).value = first.value ;
}
else second.style.display=''; }
function FirstChangeOption2(ele,first,second,third,field)
{
RemoveAllOption(second);
second.options.add(new Option(first.options[first.selectedIndex].text,"")); RemoveAllOption(third);
AddEmptyOption(third);
var TempOptionStr;
var SkillCode = field.value;
var currentValue = first.value;
if (currentValue.length >= 2){
var arrValue = SkillCode.split(";");
for (var i=0;i<arrValue.length;i++){
var arrOneValue = arrValue[i].split(",");
if (currentValue.substr(0,2) == arrOneValue[0].substr(0,2)) { //查找到合适的项目
var IsZero = true;
var ssub = arrOneValue[0].substr(4);
for(var j=0; j<ssub.length;j++)
{
if(ssub.substring(j,j+1) != "0")
{
IsZero = false;
break;
}
}
if(IsZero && arrOneValue[0]!=currentValue)
{
TempOptionStr= ' '+arrOneValue[1];
second.options.add(new Option(TempOptionStr,arrOneValue[0]));
}
}
}
}
document.getElementById(ele).value = first.value;

if (second.options.length <= 1) second.style.display='none'; else second.style.display='';
if (third.options.length <= 1) third.style.display='none'; else third.style.display=''; }
function SecondChangeOption(ele,second,third,field)
{
RemoveAllOption(third);
third.options.add(new Option(second.options[second.selectedIndex].text.replace(' ',''),""));
var TempOptionStr;
var SkillCode = field.value;
var currentValue = second.value;
if (currentValue.length!=0){
var arrValue = SkillCode.split(";");
for (var i=0;i<arrValue.length;i++){
var arrOneValue = arrValue[i].split(",");
if (arrOneValue[0].length>4 && arrOneValue[0] != currentValue && currentValue.substring(0,4) == arrOneValue[0].substr(0,4)) { //查找到合适的项目
TempOptionStr= ' '+arrOneValue[1];
third.options.add(new Option(TempOptionStr,arrOneValue[0]));
}
}
}
document.getElementById(ele).value = second.value;

if (third.options.length <= 1) third.style.display='none'; else third.style.display=''; }
function ThirdChangeOption(ele,third)
{
document.getElementById(ele).value = third.value ;

}

-------------------------------------------------------------------
比如有EXcel中有一条数据的身份证号码不对,则该条数据都不导入,把该条数据提出来,让他显示在GridView中.

-------------------------------------------------------------------
楼主的做法很不科学,也很难实现
第2个回答  2010-12-23
给你个思路吧。
1. 将excel文件上传到服务端,通过fileupload控件。
2. 读取上传后的excel文件,代码如下
string strConn;
strConn = "Provider=Microsoft.Jet.OLEDB.4.0;" +
"Data Source=C:\\exceltest.xls;" +
"Extended Properties=Excel 8.0;";

OleDbDataAdapter myCommand = new OleDbDataAdapter("SELECT * FROM [Sheet1$]",strConn);

DataSet myDataSet = new DataSet();
myCommand.Fill(myDataSet, "ExcelInfo");
gvTest.DataSource = myDataSet.Tables["ExcelInfo"].DefaultView;
gvTest.DataBind();

3. 至于如何写到数据库,很简单了吧,myDataSet.Tables["ExcelInfo"] 就是DataTable
,里面字段顺序决取于你excel中的列顺序,按照实际列顺序构造insert into语句,通过循环,可以将excel中的多行数据插入到数据库了。

自己多练习,加油!
相似回答