从Excel表中读取数据,添加到Sql数据库中的问题

zzzGoogle 2005-06-28 09:44:24
asp.net(C#)

我从Excel表中读取数据,添加到Sql数据库中,
有的是添加姓名(string),
有的是添加学分(int),
问题出现了,
就是有些情况,Excel也不知道是怎么弄的,
好像学分那一列,看上去不是很正常(与正常的数值型相比)

导的时候就出现问题了,导不进
Convert.ToDecimal(rowExcel["score"]);
这一行出现错误。

…………………………………………

怎么解决????

我在想即使不能进去的话,也不能一个网页显示一堆英文错误信息,
显示个什么格式不对的信息也行。

还有是不是可以在导入数据之前对Excel中的数据格式做个判断???

大虾出手相救啊…!!!
...全文
736 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
ye_zi 2005-06-29
  • 打赏
  • 举报
回复
brando_beat 2005-06-29
  • 打赏
  • 举报
回复
顶一下
nayc 2005-06-29
  • 打赏
  • 举报
回复
http://www.cnblogs.com/hedonister/articles/121441.html 收藏……
tigerwen01 2005-06-29
  • 打赏
  • 举报
回复
参考:

Excel文件的读取
public DataSet ExcelToDS(string Path)
{
string strConn = "Provider=Microsoft.Jet.OLEDB.4.0;" +"Data Source="+ Path +";"+"Extended Properties=Excel 8.0;";
OleDbConnection conn = new OleDbConnection(strConn);
conn.Open();
string strExcel = "";
OleDbDataAdapter myCommand = null;
DataSet ds = null;
strExcel="select * from [sheet1$]";
myCommand = new OleDbDataAdapter(strExcel, strConn);
ds = new DataSet();
myCommand.Fill(ds,"table1");
return ds;
}
对于EXCEL中的表即sheet([sheet1$])如果不是固定的可以使用下面的方法得到
string strConn = "Provider=Microsoft.Jet.OLEDB.4.0;" +"Data Source="+ Path +";"+"Extended Properties=Excel 8.0;";
OleDbConnection conn = new OleDbConnection(strConn);
DataTable schemaTable = objConn.GetOleDbSchemaTable(System.Data.OleDb.OleDbSchemaGuid.Tables,null);
string tableName=schemaTable.Rows[0][2].ToString().Trim();
Excel文件的写入
public void DSToExcel(string Path,DataSet oldds)
{
//先得到汇总EXCEL的DataSet 主要目的是获得EXCEL在DataSet中的结构
string strCon = " Provider = Microsoft.Jet.OLEDB.4.0 ; Data Source ="+path1+";Extended Properties=Excel 8.0" ;
OleDbConnection myConn = new OleDbConnection(strCon) ;
string strCom="select * from [Sheet1$]";
myConn.Open ( ) ;
OleDbDataAdapter myCommand = new OleDbDataAdapter ( strCom, myConn ) ;
ystem.Data.OleDb.OleDbCommandBuilder builder=new OleDbCommandBuilder(myCommand);
//QuotePrefix和QuoteSuffix主要是对builder生成InsertComment命令时使用。
builder.QuotePrefix="["; //获取insert语句中保留字符(起始位置)
builder.QuoteSuffix="]"; //获取insert语句中保留字符(结束位置)
DataSet newds=new DataSet();
myCommand.Fill(newds ,"Table1") ;
for(int i=0;i<oldds.Tables[0].Rows.Count;i++)
{
//在这里不能使用ImportRow方法将一行导入到news中,因为ImportRow将保留原来DataRow的所有设置(DataRowState状态不变)。在使用ImportRow后newds内有值,但不能更新到Excel中因为所有导入行的DataRowState!=Added
DataRow nrow=aDataSet.Tables["Table1"].NewRow();
for(int j=0;j<newds.Tables[0].Columns.Count;j++)
{
nrow[j]=oldds.Tables[0].Rows[i][j];
}
newds.Tables["Table1"].Rows.Add(nrow);
}
myCommand.Update(newds,"Table1");
myConn.Close();
}
renyu732 2005-06-29
  • 打赏
  • 举报
回复
SQL SERVER 与ACCESS、EXCEL的数据转换
http://www.cnblogs.com/hedonister/articles/121441.html
mrguo 2005-06-29
  • 打赏
  • 举报
回复
路过的,太多高人了
xu770 2005-06-29
  • 打赏
  • 举报
回复
学习,学习
BossFriday 2005-06-29
  • 打赏
  • 举报
回复
数据类型要一致

这么多高手都来了.羡慕.
Eddie005 2005-06-29
  • 打赏
  • 举报
回复
呵呵~ 白菜的回答才是正确的,用OLEDB读取Excel文件就是有这个问题
liuqinglq 2005-06-29
  • 打赏
  • 举报
回复
Excel的每列数据类型上下要一致,比如你的表头上写学分,下面输入数字,就可能会有问题,把你的数字前加个'即可

------------------------------------------------------------------

没错

一般建议是:Excel任何单元格前都加上单引号

别担心,导入SQL SERVER时,能转换的它自己会转换类型的
zeusvenus 2005-06-29
  • 打赏
  • 举报
回复
强制转换数字类型之前先用正则字符串Replace掉前后和中间的空白字符及非小数点与数字的字符试试.
孟子E章 2005-06-29
  • 打赏
  • 举报
回复
Excel的每列数据类型上下要一致,比如你的表头上写学分,下面输入数字,就可能会有问题,把你的数字前加个'即可
saucer 2005-06-29
  • 打赏
  • 举报
回复
>>这一行出现错误

出错时,看rowExcel["score"]其中值是什么?

你是怎么读的?如果用OLEDB,用类似下面这样的连接字符串,"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\MyExcel.xls;Extended Properties=""Excel 8.0;HDR=Yes;IMEX=1"""

然后在转换时做个判断

Decimal d;
if (rowExcel["score"] == DBNull.Value || rowExcel["score"].ToString().Trim().Length == 0)
d = 0;
else
d = Convert.ToDecimal(rowExcel["score"]);

62,074

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧