2011-12-01 83 views
0

我使用VS2005 C#和SQL Server 2005SQL與Excel數據一起附上「User.Identity.Name」導入到SQL Server數據庫

我有進口的數據在電子表格中插入一個Excel文件導入數據庫。

但是,爲了改進它,我想對每個導入實施某種「日誌記錄」。

對於用戶導入的每一行數據,都會有一列存儲登錄用戶的名稱,即User.Identity.Name

下面是我的Excel導入代碼的代碼片段:

// Create Connection to Excel Workbook 
string connStr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + strUploadFileName + ";Extended Properties=Excel 8.0;"; 

using (OleDbConnection connection = new OleDbConnection(connStr)) 
{ 
    OleDbCommand command = new OleDbCommand("Select [User ID], [Username], [Age], [Address], [Date of Reg], [Membership Type], [Membership Expiry] FROM [sheet1$]", connection); 
    //would like to insert 'User.Identity.Name' into column 'userlog' 

    connection.Open(); 
    Console.WriteLine("Connection Opened"); 

    // Create DbDataReader to Data Worksheet 
    using (DbDataReader dr = command.ExecuteReader()) 
    { 
     // SQL Server Connection String 
     string sqlConnectionString = "Data Source=<DS>"; 

     // Bulk Copy to SQL Server 
     using (SqlBulkCopy bulkCopy = new SqlBulkCopy(sqlConnectionString)) 
     { 
     bulkCopy.DestinationTableName = "UserData"; 
     bulkCopy.WriteToServer(dr); 
     } 
    } 
} 

我不知道,因爲SELECT聲明將我從中導入數據的sheet1$唯一的變量我如何能做到這一點,所以我我不知道如何將另一個變量從另一個源包含到sql查詢中。我需要有經驗的建議。

謝謝你們提前提供任何幫助。

編輯:

我有.csv類型另一個導入方法。由於SELECT聲明與我用於.xls的聲明不同,我應該如何更改它?下面的代碼片段:

string dir = @"C:\...\UploadFiles"; 
string mycsv = DateTime.Now.ToString("yyyyMMddHHmmss") + strExtension; 
// Save the Excel spreadsheet on server. 
UserImport.SaveAs(dir + mycsv); 

// Create Connection to Excel Workbook 
string connStr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + dir + 
       ";Extended Properties=Text;"; 
using (OleDbConnection ExcelConnection = new OleDbConnection(connStr)) 
{ 
    OleDbCommand ExcelCommand = new OleDbCommand(
      "SELECT [User ID], [Username], [Age], [Address], 
      [Date of Reg], [Membership Type], [Membership Expiry] 
      FROM " + mycsv, ExcelConnection); 

    OleDbDataAdapter ExcelAdapter = new OleDbDataAdapter(ExcelCommand); 
    ExcelConnection.Open(); 

    using (DbDataReader dr = ExcelCommand.ExecuteReader()) 
    { 
     // SQL Server Connection String 
     string sqlConnectionString = "Data Source=<DS>"; 

     // Bulk Copy to SQL Server 
     using (SqlBulkCopy bulkCopy = new SqlBulkCopy(sqlConnectionString)) 
     { 
      bulkCopy.DestinationTableName = "UserData"; 
      bulkCopy.WriteToServer(dr); 
      //Response.Write("<script>alert('User Data imported');</script>"); 
     } 
    } 
} 

謝謝

回答

1

你可以嘗試擴展你的select子句。

string selectStmt = string.Format("Select [User ID], [Username], [Age], [Address], 
         [Date of Reg], [Membership Type], [Membership Expiry], 
         '{0}' as [userlog] FROM [sheet1$]", User.Identity.Name); 
OleDbCommand command = new OleDbCommand(selectStmt, connection); 

根據您編輯的問題

string selectStmt = string.Format("SELECT [User ID], [Username], [Age], [Address], 
     [Date of Reg], [Membership Type], [Membership Expiry],'{0}' as [userlog] 
     FROM {1}", User.Identity.Name, mycsv); 
+0

Pilgerstorfer嗨更新,對不起,我在SQL查詢中犯了一個錯誤。我想爲它做一個'INSERT'語句。我應該如何改變查詢?謝謝 – gymcode

+0

我想出了更新查詢。非常感謝,您的解決方案就是我正在尋找的。 – gymcode

+0

很高興我能幫忙! –

1

您可以創建一個DataTable其中將包含您的Excel數據和身份名稱,然後批量複製此數據表到您的SQL Server。

有關批量插入數據表的更多信息,請參閱此link