我正在使用一个函数将数据从访问数据库导入SQL服务器:
public string importDataFromAccess(string table, string fileName)
{
OleDbConnection OleDbConn = new OleDbConnection(String.Format("Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0}", fileName));
try
{
string sSQLTable = table;
string myExcelDataQuery = "Select * from " + sSQLTable;
string sSqlConnectionString = connStr;
string sClearSQL = "DELETE FROM " + sSQLTable;
SqlConnection SqlConn = new SqlConnection(sSqlConnectionString);
SqlCommand SqlCmd = new SqlCommand(sClearSQL, SqlConn);
SqlConn.Open();
SqlCmd.ExecuteNonQuery();
SqlConn.Close();
OleDbCommand OleDbCmd = new OleDbCommand(myExcelDataQuery, OleDbConn);
OleDbConn.Open();
OleDbDataReader dr = OleDbCmd.ExecuteReader();
SqlBulkCopy bulkCopy = new SqlBulkCopy(sSqlConnectionString);
bulkCopy.DestinationTableName = sSQLTable;
while (dr.Read())
{
bulkCopy.WriteToServer(dr);
}
OleDbConn.Close();
return "Done";
}
catch (Exception ex)
{
OleDbConn.Close();
return ex.ToString();
}
}
我注意到它没有导入每个表的第一条记录,任何人都可以帮助注意为什么以及如何修复?希望这只是第一行...
答案 0 :(得分:0)
你不应该需要
while (dr.Read())
{
bulkCopy.WriteToServer(dr);
}
您只需要用
替换它 bulkCopy.WriteToServer(dr);
将提供的IDataReader中的所有行复制到目标表 由SqlBulkCopy的DestinationTableName属性指定 对象
但是你调用的dr.Read()读取了Reader的第一行并将IDataReader推进到下一条记录(因此WriteServer方法无法访问它)。