作者:Yomon-00 | 来源:互联网 | 2023-05-17 11:37
privatevoidTransferData(stringexcelFile,stringsheetName,stringconnectionString)
private void TransferData(string excelFile, string sheetName, string connectionString)
{
DataSet ds = new DataSet();
try
{
//获取全部数据
string strConn = "Provider=Microsoft.Jet.OLEDB.4.0;" + "Data Source=" + excelFile + ";" + "Extended Properties=Excel 8.0;";
OleDbConnection conn = new OleDbConnection(strConn);
conn.Open();
string strExcel = "";
OleDbDataAdapter myCommand = null;
strExcel = string.Format("select * from [{0}$]", sheetName);
myCommand = new OleDbDataAdapter(strExcel, strConn);
myCommand.Fill(ds, sheetName);
//用bcp导入数据
using (System.Data.SqlClient.SqlBulkCopy bcp = new System.Data.SqlClient.SqlBulkCopy(connectionString))
{
bcp.SqlRowsCopied += new System.Data.SqlClient.SqlRowsCopiedEventHandler(bcp_SqlRowsCopied);
bcp.BatchSize = 1;//每次传输的行数
bcp.NotifyAfter = 1;//进度提示的行数
bcp.DestinationTableName = "Staff_Msg";//目标表
bcp.WriteToServer(ds.Tables[0]);
}
}
catch (Exception ex)
{
System.Windows.Forms.MessageBox.Show(ex.Message);
}
}
//进度显示
void bcp_SqlRowsCopied(object sender, System.Data.SqlClient.SqlRowsCopiedEventArgs e)
{
this.Text = e.RowsCopied.ToString();
this.Update();
}
private void btnInput_Click(object sender, EventArgs e)
{
string p = IniReadValue("StandIni", "ExportStaffForPath", configPath);
TransferData(p,"Sheet1",sql);
}
数据库中只有1列【年龄】是int类型,还有两个是bit类型。Excel里的年龄数据我用过了数值类型,也加过了'.还是提示这个错误,请各位大侠帮我看看是什么原因?小弟初来CSDN,分数不多,请帮帮忙!
10 个解决方案
意思,楼主自己也明白,这个是没对应上或者有转换不了的,比如空格什么的,多仔细看看吧
数据源有问题,你还是直接读取EXCEL内容,然后自己写SQL语句插入数据吧,这样可以纠正EXCEL中不正确的数据
数据库里有些值为空或NULL
单元格数据是否存在问题
我在网上下载了个例子运行没有问题,但是把代码移到我的里面就不行,还是报告这个错误。郁闷死了!Excel里的数据也改过了还是不行!真搞不懂问题出在哪里?
我测试发现如果数据库中的类型是int,那么在Excel对应的字段中值前加个 ' 转成string就可以。但是数据库中是bit类型的,在Excel里应该用什么类型呢?文本、数值都试过了不行!请指教!
碰到同样的问题,急死了,测试了很久都不清楚问题出在哪里。我把DataTable数据集里的数据添加到数据库中,字段都完全相同哇,如果DataTable中的int类型的数据值为空,我就循环设置为DBNull.Value了,可是还是报同样的错,真的不清楚问题出在哪里了。。。。
我的字段位置对应都对,不能导入的原因是:datatable中的数据有一些后面有空格,导致长度可能超过数据库中定义长度。如何去掉这些空格呢?