2012-02-23 71 views
0

你好,我有下面的代码由于某种原因不能正常工作:SQL批量复制不会上传

我使用OLEDB来填补从通过FileUpload控件上载一个管道分隔文件中的数据集一个asp.net web应用程序。然后我拿到数据表,然后使用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数据库?谢谢。

+0

没有错误信息。按钮点击接受它,但没有数据加载到数据库中。它可能与管道(|)分隔符有关吗?我听说oledb不喜欢那个定界符。我不确定。 – Jeff 2012-02-23 15:13:47

+0

@ user1049984,通过使用IDE的代码步骤。 dt和connString的值是什么?我感觉你的数据源不正确,因为dir只是一个目录。 – 2012-02-23 15:17:01

+0

CONNSTRING值= CONNSTRING = “供应商= Microsoft.Jet.OLEDB.4.0;数据源= \” C:\\ \\的用户我的名字\\桌面\\\ “;扩展属性= \” 文本; HDR =是;格式=分隔(|)\ “;” – Jeff 2012-02-23 15:24:59

回答

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;    

     } 
    } 
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; 
} 
+0

仍然没有工作。它说“Microsoft.jet.oledb.4.0”提供程序未在本地计算机上注册。如果有帮助。 – Jeff 2012-02-23 16:07:33