读书人

诸位看官过往的神灵先停停吧excel

发布时间: 2012-09-07 10:38:15 作者: rapoo

各位看官,过往的神灵先停停吧,excel导入数据库!

C# code
if (FileUpload1.FileName == "")        {            Page.RegisterStartupScript("是","<script>alert('请选择文件');</script>");            return null;        }        string fileExtenSion;        fileExtenSion = Path.GetExtension(FileUpload1.FileName);        if (fileExtenSion.ToLower() != ".xls" && fileExtenSion.ToLower() != ".xlsx")        {            Page.RegisterStartupScript("是", "<script>alert('上传文件格式不正确!');</script>");            return null;        }        try        {            string FileName = "App_Data/" + Path.GetFileName(FileUpload1.FileName);            if (File.Exists(Server.MapPath(FileName)))            {                File.Delete(Server.MapPath(FileName));            }            FileUpload1.SaveAs(Server.MapPath(FileName));


这段代码我断点了一下,在if (File.Exists(Server.MapPath(FileName)))
{

File.Delete(Server.MapPath(FileName));

}
这个地方就没有执行直接执行下面的FileUpload1.SaveAs(Server.MapPath(FileName));在这一句直接报错跳出来了,请各位帮忙看看错误在哪

下面使整个导入数据区的代码
C# code
 private DataTable xsldata()    {        if (FileUpload1.FileName == "")        {            Page.RegisterStartupScript("是","<script>alert('请选择文件');</script>");            return null;        }        string fileExtenSion;        fileExtenSion = Path.GetExtension(FileUpload1.FileName);        if (fileExtenSion.ToLower() != ".xls" && fileExtenSion.ToLower() != ".xlsx")        {            Page.RegisterStartupScript("是", "<script>alert('上传文件格式不正确!');</script>");            return null;        }        try        {            string FileName = "App_Data/" + Path.GetFileName(FileUpload1.FileName);            if (File.Exists(Server.MapPath(FileName)))            {                File.Delete(Server.MapPath(FileName));            }            FileUpload1.SaveAs(Server.MapPath(FileName));            //HDR=Yes,这代表第一行是标题,不做为数据使用 ,如果用HDR=NO,则表示第一行不是标题,做为数据来使用。系统默认的是YES             string connstr2003 = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + Server.MapPath(FileName) + ";Extended Properties='Excel 8.0;HDR=Yes;IMEX=1;'";            string connstr2007 = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + Server.MapPath(FileName) + ";Extended Properties=\"Excel 12.0;HDR=YES\"";            OleDbConnection conn;            if (fileExtenSion.ToLower() == ".xls")            {                conn = new OleDbConnection(connstr2003);            }            else            {                conn = new OleDbConnection(connstr2007);            }            conn.Open();            string sql = "select * from [Sheet1$]";            OleDbCommand cmd = new OleDbCommand(sql, conn);            DataTable dt = new DataTable();            OleDbDataReader sdr = cmd.ExecuteReader();            dt.Load(sdr);            sdr.Close();            conn.Close();            //删除服务器里上传的文件             if (File.Exists(Server.MapPath(FileName)))            {                File.Delete(Server.MapPath(FileName));            }            return dt;        }        catch (Exception e)        {            return null;        }    }     protected void Button1_Click(object sender, EventArgs e)    {       try{                  DataTable dt = xsldata();                  //dataGridView2.DataSource = ds.Tables[0];                 int errorcount = 0;//记录错误信息条数                 int insertcount = 0;//记录插入成功条数                  int updatecount = 0;//记录更新信息条数                 SqlConnection conn = new SqlConnection("server=.;uid=123456;pwd=123456;database=OnlineExam");                SqlCommand cmd = new SqlCommand();                cmd.Connection = conn;                conn.Open();                 for(int i = 0; i < dt.Rows.Count; i++)                 {                    int CourseID = Convert.ToInt32(dt.Rows[i][0].ToString());//dt.Rows[i]["Name"].ToString(); "Name"即为Excel中Name列的表头                     string Title = dt.Rows[i][1].ToString();                    string AnswerA =dt.Rows[i][2].ToString();                    string AnswerB = dt.Rows[i][3].ToString();                    string AnswerC = dt.Rows[i][4].ToString();                    string AnswerD = dt.Rows[i][5].ToString();                    string Answer = dt.Rows[i][6].ToString();                    if (Title != "" && Title != "" && AnswerA != "" && AnswerB != "" && AnswerC != "" && AnswerD != "" && Answer != "")                     {                        SqlCommand selectcmd = new SqlCommand("select count(*) from SingleProblem where CourseID='" + CourseID + "' and Title='" + Title + "' and AnswerA='" + AnswerA + "' and AnswerB='" + AnswerB +"' and AnswerC='" + AnswerC +"' and AnswerD='" + AnswerD +"' and Answer='" + Answer , conn);                         int count = Convert.ToInt32(selectcmd.ExecuteScalar());                         if(count > 0)                         {                             updatecount++;                         }                         else                         {                            SqlCommand insertcmd = new SqlCommand("insert into SingleProblem(CourseID,Title,AnswerA,AnswerB,AnswerC,AnswerD,Answer) values('" + CourseID + "','" + Title + "'," + AnswerA + ",'" + AnswerB + "','" + AnswerC + "','" + AnswerD + "','" + Answer + "')", conn);                             insertcmd.ExecuteNonQuery();                             insertcount++;                         }                     }                     else                     {                         errorcount++;                     }                 }                 Response.Write((insertcount + "条数据导入成功!" + updatecount + "条数据重复!" + errorcount + "条数据部分信息为空没有导入!"));             }             catch(Exception ex)             {              }         }  



断点结果就是 DataTable dt = xsldata();

中的dt是null


[解决办法]
try catch中有报错才返回null的吧,
这个地方就没有执行直接执行下面的FileUpload1.SaveAs(Server.MapPath(FileName));在这一句直接报错跳出来了,请各位帮忙看看错误在哪
你的那个Server.MapPath(FileName) 断点出来值是什么有没有错啊!

读书人网 >C#

热点推荐