65.9K
CodeProject 正在变化。 阅读更多。
Home

一个简化的 SQL-CSV 导入/导出功能

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.58/5 (38投票s)

2005年2月4日

6分钟阅读

viewsIcon

799156

downloadIcon

11218

一个简化的 SQL-CSV 导入/导出功能。

引言

这个小而重要的实用程序是为希望了解如何在数据库和 CSV 文件之间导入和导出数据的用户创建的。这个实用程序有许多替代方案。(BCP) SQL Server 的批量复制提供了一个通过单个语句插入多条记录的功能。您还可以创建一个不错的程序包来完成这项工作。但我懂 C#,这就是我的做法。我不知道是我搜索的方向不对,还是没有找到一个可以以更通用的方式,并且,当然,以普通用户(程序员)可以理解的方式实现此功能的美观代码。

感谢所有查看和使用此实用程序的人。这帮助我改进并提供更好的东西。

好消息

应用程序已更新。为什么?现在您可以将 CSV 或文本数据导出到您的 SQL Server 或 Access 数据库。同样,您可以将数据从 SQL Server 或 Access 数据库导出到 CSV 或文本文件。类文件ClsSQLCSV.csClsMSACSV.cs 已更新以提供更大的简洁性。只需插入您的控件,然后向框中提供一些数据即可完成。这是一个允许您使用 SQL Server 数据库以及 MS-Access 数据库的实用程序。

更新

  • 屏幕外观已更改,以提供更多功能。
  • 现在,一个屏幕将提供一个下拉列表供您选择数据库,而不是为 SQL Server 和 Access 提供单独的屏幕。
  • 提供了一个名为SetProperties.cs 的单独类文件,允许您设置您选择的偏好。您可以设置不同的属性,例如为导入您的 CSV/文本文件提供表名,并将 CSV/文本文件保存到您指定位置的 Web 服务器上(根文件夹下)。
  • 对于导出功能,您可以提供要导出的表名,指定要存储在 Web 服务器上的文件名以及存储位置。
  • 提供了一个额外的控件(不在屏幕截图中)在 SQL Server 和 Access 之间传输数据。通过提供表名,您可以传输数据。

重要提示

这个示例是使用SQL Server 中的 Northwind 数据库和 MS-Access 中的 Northwind 数据库准备的。SQL Server、Access 和 CSV 文件的连接字符串保存在Web.Config 文件中。使用命名空间System.Collections.Specialized 读取字符串。请记住根据您的要求修改 Config 文件中的连接字符串。Northwind 的示例 CSV 文件位于名为Sample 的文件夹中(CSVSample.csvTXTSample.txt)。以下是Web.Config 文件中的设置

<appSettings>
  <add key="connsql" value="server=DATABASESERVER;database=Northwind;
                     Trusted_Connection=false;uid=sqluserid;pwd=sqlpassword"/>
  <add key="connmsa" value="Provider=Microsoft.Jet.OleDb.4.0;
                     datasource=C:\\Inetpub\\wwwroot\\exportcsv\\Northwind.mdb" />
  <add key="connxls" value="Provider= Microsoft.Jet.OLEDB.4.0;
                     Extended Properties='text;HDR=Yes;FMT=Delimited';Data Source=" />
</appSettings>

如何运行应用程序

  • 将文件解压到文件夹(ExportCSV)。
  • 在 IIS 中创建一个名为ExportCSV 的虚拟目录。
  • 如上所述,对配置文件进行适当的更改。
  • 使用路径在浏览器中查看示例:https:///ExportCSV/ImportExport.aspx
  • 从系统中的任何位置选择 CSV/TXT 文件,然后单击“导入”按钮。
  • 提供现有表的名称以导入记录,或提供新表的名称。
  • 成功完成或失败的结果将如上图所示显示。
  • 单击“导出到 CSV”以查看同一表被导出到名为“exported”的文件夹。

Using the Code

以下是一些关于使用源代码的说明

ImportCSV.ascx.cs

Submit_Click

此处提及此事件是为了让您了解如何将数据传递给函数并完成您的任务。您可以看到SetProperties() 的一个实例,用于设置将文件导入数据库的各种参数。查看此属性列表及其用途

  • TableName:记录将存储的表名(新表或现有表)。
  • FileInformation:存储所选文件的详细信息。
  • DropExistingTable:检查数据库中的表,并且仅当此标志设置为true 时删除它(默认值为false)。
  • CsvDirOnServer:CSV/文本文件将存储在 Web 服务器上的文件夹名称。仅当您将SaveFileOnServer 设置为true 时才有用。

注意:请确保提供了TableNameFileInformation 这两个属性。这两个属性是必需的,因为没有它们,您的 CSV/文本文件将不会被导出。

private void Submit_Click(object sender, System.EventArgs e)
{
    try
    {
        FileInfo FICSV = new FileInfo(OFDSelectFile.PostedFile.FileName);
        SetProperties sp = new SetProperties();
    
        if (IsValidFile(FICSV))
        {
            sp.TableName = txtTableName.Text;
            sp.CsvDirOnServer = txtCSVDir.Text;
            sp.DropExistingTable=true;
            sp.SaveFileOnServer=true;
            sp.FileInformation = FICSV;

            switch(ddlDB.SelectedItem.Value)
            {
                case "SQL":    
                    ClsSQLCSV objSQL = new ClsSQLCSV();
                    importstatus.Text = objSQL.GenerateTable(sp);
                    break;
                case "MSA":
                    ClsMSACSV objMSA = new ClsMSACSV();
                    importstatus.Text = objMSA.GenerateTable(sp);
                    break;
            }
        }
    }
    catch(Exception ex)
    {
        importstatus.Text = ex.Message.ToString() + "<br>";
        importstatus.Text += "Error importing. Please try again";
    }
}

ExportCSV.ascx.cs

Submit_Click

此事件让您了解如何将数据传递给函数并完成导出任务。这里您也可以看到SetProperties() 的一个实例,用于设置将文件导入数据库的各种参数。查看此属性列表及其用途

  • ExportTableName:将从中获取记录的数据库表名(新表或现有表)。
  • ExportCSVasName:用于存储数据的 CSV/文本文件名。
  • ExportCSVDirOnServer:CSV/文本文件将存储在 Web 服务器上的文件夹名称(请注意,该文件夹将采用您应用程序的根路径)。默认是根路径。
  • ExportAsCsvOrText:默认值为“C”。这意味着文件将以.csv 扩展名保存。不设置此属性也将以.csv 保存您的文件。您只需在提供的文本框中输入文件名(不带扩展名)即可将文件保存为.csv

注意:请确保提供了ExportTableNameExportCSVasName 这两个属性。这两个属性是必需的,因为没有它们,您的 CSV/文本文件将不会生成。

private void Submit_Click(object sender, System.EventArgs e)
{
    try
    {                
        SetProperties sp = new SetProperties();
        sp.ExportTableName = txtTableName.Text;
        sp.ExportCSVasName = txtCSVFileName.Text;
        sp.ExportCSVDirOnServer = txtCSVDir.Text;
        sp.ExportAsCsvOrText = "T"; //"C" for CSV or "T" for Text

        switch(ddlDB.SelectedItem.Value)
        {
            case "SQL":
                ClsSQLCSV objSQL = new ClsSQLCSV();
                importstatus.Text = objSQL.GenerateCSVFile(sp);
                break;
            case "MSA":
                ClsMSACSV objMSA = new ClsMSACSV();
                importstatus.Text = objMSA.GenerateCSVFile(sp);
                break;
        }
    }
    catch(Exception ex)
    {
        importstatus.Text = ex.Message.ToString() + "<br>";
        importstatus.Text += "Error exporting. Please try again";
    }
}

库的使用

  • System.Data.Odbc(连接并从 CSV 文件获取记录)。
  • System.Data.SqlClient(连接并从 SQL Server 数据库表获取记录)。
  • System.Data.OleDb(连接并从 Access 数据库表获取记录)。
  • System.Collections.SpecializedNameValueCollection - 从配置设置中获取键值对)。
  • System.ConfigurationConfigurationSettings - 提供对指定配置节中配置设置的访问)。
  • System.IOFileStream - 读取和写入 CSV 文件)。

关注点

导入和导出这两个控件都用于ImportExport.aspx 文件中。将它们用作单独的控件,并将它们放置在页面上的任何位置。

先前版本的历史

该实用程序的前一个版本没有从文本文件中传输数据的能力。没有提供允许用户从其他位置(Web 路径除外)选择 CSV 文件的功能。没有提供允许除“TempTable”之外的表名进行命名的功能。每次创建新表之前都会删除TempTable。这只允许存储新记录。

© . All rights reserved.