所以我有以下代码来获取Excel文件并将其写入我的数据库中的表。
string target = Server.MapPath("~/Upload");
if (fupStation.HasFile)
{
fupStation.SaveAs(System.IO.Path.Combine(target, fupStation.FileName));
string connectionString = String.Format(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0};Extended Properties=""Excel 8.0;HDR=YES;IMEX=1;""", target + "\\" + fupStation.FileName); string query = String.Format("select * from [{0}$]", "Client Station Assignments");
OleDbDataAdapter dataAdapter = new OleDbDataAdapter(query, connectionString);
DataSet dsStation = new DataSet();
dataAdapter.Fill(dsStation);
DataTable dtStation = new DataTable();
dtStation = dsStation.Tables[0];
gvOne.DataSource = dtStation;
gvOne.DataBind();
using (SqlBulkCopy s = new SqlBulkCopy(ConfigurationManager.ConnectionStrings["cnSQL"].ConnectionString))
{
s.DestinationTableName = "StationImport";
s.NotifyAfter = 100;
s.WriteToServer(dtStation);
s.Close();
}
}
所以这是问题所在。它读取文件并填充Datatable就好了(通过用它填充Grid证明)我知道SQLBulkCopy代码正在被调用,但最后它没有给出任何错误,但我的表中没有显示任何错误!
以前有人通过这个吗?这是我第一次使用BulkCopy(以及读取文件!)所以如果我做错了,我就不会被提升。
由于
答案 0 :(得分:2)
我的代码在vb.net中运行
请记住,datatable和sql表需要匹配字段数据类型和列顺序。
Using connection As SqlConnection = New SqlConnection(conn)
connection.Open()
Using bulkCopy As SqlBulkCopy = New SqlBulkCopy(connection, SqlBulkCopyOptions.TableLock, Nothing)
bulkCopy.DestinationTableName = "TableName"
bulkCopy.BulkCopyTimeout = 60000
bulkCopy.BatchSize = 0
bulkCopy.WriteToServer(MyDataTable)
bulkCopy.Close()
End Using
connection.Close()
End Using
答案 1 :(得分:2)
是否所有列都正确映射? “如果两者之间的列不匹配,副本就不会成功。” (来源http://www.sqlteam.com/article/use-sqlbulkcopy-to-quickly-load-data-from-your-client-to-sql-server)