访问导入到SQL服务器而不导入第一行

时间:2012-03-26 09:37:24

标签: sql-server-2008 ms-access import

我正在使用一个函数将数据从访问数据库导入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();
        }
    } 

我注意到它没有导入每个表的第一条记录,任何人都可以帮助注意为什么以及如何修复?希望这只是第一行...

1 个答案:

答案 0 :(得分:0)

你不应该需要

while (dr.Read())
{
     bulkCopy.WriteToServer(dr);
}

您只需要用

替换它
     bulkCopy.WriteToServer(dr);

WriteToServer方法

  

将提供的IDataReader中的所有行复制到目标表   由SqlBulkCopy的DestinationTableName属性指定   对象

但是你调用的dr.Read()读取了Reader的第一行并将IDataReader推进到下一条记录(因此WriteServer方法无法访问它)。