数据表中的sql批量复制不会上传

时间:2012-02-23 15:05:11

标签: c# asp.net sql sqlbulkcopy

你好,我有下面的代码由于某种原因无效:

我使用oledb从一个管道分隔文件中填充数据集,该文件通过asp.net Web应用程序上的fileupload控件上传。然后,我获取数据表,然后使用sql批量复制将数据复制到我已在sql中设置的表。

protected void btnUpload_Click(object sender, EventArgs e)
{
    string filepath = fileUpload1.PostedFile.FileName;
    PerformBulkCopy(GencoUpload(filepath));
}

public static DataTable GencoUpload(string path)
{
    string full = Path.GetFullPath(path);
    string file = Path.GetFileName(full);
    string dir = Path.GetDirectoryName(full);

    string connString = "Provider=Microsoft.Jet.OLEDB.4.0;DataSource=\"" + dir +
    "\\\";" + "Extended Properties=\"text;HDR=Yes;Format=Delimited(|)\";";

    string query = "SELECT * FROM " + file;

    DataTable dt = new DataTable();

    OleDbDataAdapter dAdapter = new OleDbDataAdapter(query, connString);

    try
    {
        dAdapter.Fill(dt);
    }
    catch
    {
        // catch code
    }

    dAdapter.Dispose();
    return dt;
}

private void PerformBulkCopy(DataTable GencoInfo)
{
    string conStr = ConfigurationManager.ConnectionStrings["EDI"].ConnectionString;

    using (SqlBulkCopy bulkcopy = new SqlBulkCopy(conStr))
    {
        bulkcopy.DestinationTableName = "dbo.GencoUploadTempTable";
        bulkcopy.WriteToServer(GencoInfo);
    }
}

有人可以帮我解释为什么这不能加载到我的sql数据库中?谢谢。

2 个答案:

答案 0 :(得分:1)

这应该做的工作...............

       public static DataTable columnNamessheet1(String excelFile)
    {
        string connString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + excelFile + ";Extended Properties='Excel 12.0;HDR=yes'";
        string connectionstring ="Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=DebitCare;Data Source=SSDEV7-HP\\SQLEXPRESS";

        using (OleDbConnection conn = new OleDbConnection(connString))
        {
            SqlConnection SqlConn1 = new SqlConnection(connectionstring);
            SqlConn1.Open();
            OleDbCommand odc = new OleDbCommand(string.Format("Select LoanNumber,CustomerName,DateofBirth,MobileNo,SanctionDate,EmployerName FROM [BAJAJ DUMP$]"), conn);
            conn.Open();
            OleDbDataReader reader = odc.ExecuteReader();               
            DataTable sheetSchema = reader.GetSchemaTable();
            SqlBulkCopy sqlbulk = new SqlBulkCopy(SqlConn1);
            sqlbulk.DestinationTableName = "CUSTOMER_DETAILS";
            sqlbulk.ColumnMappings.Add("LoanNumber", "CUSTOMER_LOAN_NO");
            sqlbulk.ColumnMappings.Add("CustomerName", "CUSTOMER_ NAME");
            sqlbulk.ColumnMappings.Add("DateofBirth", "CUSTOMER_DOB");
            sqlbulk.ColumnMappings.Add("MobileNo", "CUSTOMER_MOBILE NUMBER");
            sqlbulk.ColumnMappings.Add("SanctionDate", "CUSTOMER_SANCTION DATE");
            sqlbulk.ColumnMappings.Add("EmployerName", "CUSTOMER_COMPANY NAME");
            sqlbulk.WriteToServer(reader);
            conn.Close();
            return sheetSchema;            

        }
    }

答案 1 :(得分:0)

尝试这个并在catch中放置一个断点:

string connString = string.Format("Provider=Microsoft.Jet.OLEDB.4.0;DataSource={0};Extended Properties=\"text;HDR=Yes;Format=Delimited(|)\";", dir);

try
{
    dAdapter.Fill(dt);
}
catch (Exception exc)
{
    string myErrorMsg = exc.Message;
}