我的应用程序截断数据库表并使用excel中的行填充它.
使用excel文件(2000行),下面的上传代码将所有行完全插入到我的本地pc(我的开发环境)中,并且它也在服务器中完成,所以我认为我成功地完成了任务,
但是后来一个用户向我的excel添加了10个新行并试图上传2010行但是除了新添加的10行之外插入了2000行,所以使用带有2010行的excel文件,如果我从填充2000的服务器数据库表中上传它行,如果我使用我的工作环境上传它,则最终表是2010行.
服务器和本地应用程序完全相同.
我也尝试过格式化等
编辑示例执行:文件MyRecords.xlsx位于我的桌面,现在我使用连接到我的应用程序
http://myserver/myapplication
并上传MyRecords.xlsx,然后检查数据库中的计数,它显示2361条记录,然后打开visual studio并运行我的应用程序(http:// localhost:58029 /)并上传MyRecords.xlsx并再次检查数据库它显示2362条记录.
编辑示例执行2:我的Excel有2160行,如果我上传它,它会从本地和服务器中插入2160行.如果我删除了1000万行并上传它,现在它按照预期从本地和服务器插入1160行.现在,如果我重新添加这1000行并上传excel,现在如果我使用本地环境完成此过程,则可以正常插入2160行,如果是服务器,则插入1160行.所以在服务器端没有看到对excel的任何修改,所以你确定这是原因吗? –
private void UploadData(string path, string dbTableName)
{
//Create connection string to Excel work book
string excelConnectionString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + path + ";Extended Properties=Excel 12.0;Persist Security Info=False";
//Create Connection to Excel work book
OleDbConnection excelConnection = new OleDbConnection(excelConnectionString);
//Create OleDbCommand to fetch data from Excel
excelConnection.Open();
DataTable dbSchema = excelConnection.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null); //Get First Sheet Name
OleDbCommand cmd = new OleDbCommand("Select * from [" + dbSchema.Rows[0]["TABLE_NAME"].ToString() + "]", excelConnection);
OleDbDataReader dReader;
dReader = cmd.ExecuteReader();
SqlBulkCopy sqlBulk = new SqlBulkCopy(ConfigurationManager.ConnectionStrings["MyDbConn"].ConnectionString);
//Give your Destination table name
sqlBulk.DestinationTableName = dbTableName;
try
{
sqlBulk.WriteToServer(dReader);
if(dbTableName == "TempTP")
{
SDatabaseManagerData.DatabaseManagerData.UpdateTP();
}
lbl_Error.Visible = true;
lbl_Error.Text = "Database updated!";
}
catch (SqlException ex)
{
lbl_Error.Visible = true;
lbl_Error.Text = "Database updated edilemedi! Hata: " + ex.Message;
}
excelConnection.Close();
}
解决方法:
我怀疑GetOleDbSchemaTable返回的表没有包含所有数据.用户是否在表格下方而不是在表格中添加了行?
检查dbSchema.Rows [0] [“TABLE_NAME”]返回的名称.ToString()这是指引用表还是表名?
编辑:还要确保用户正确保存并上传文件.将Excel文件与数据库进行比较以确保它们匹配.
How To Retrieve Schema Information by Using GetOleDbSchemaTable and Visual Basic .NET