0

我有一个在 SQL Server 2005 中制作的表,其中包含以下列:

Fname (char (50)),
MailFrom (char (50)),
MailTo (char (50)),
Subject (char (50)),
MBody (char (100)),
MailID (int)

在表格中输入行后,我想将它们提取并存储在文本文件/文档文件/窗口表单中,每列都有文本字段。

获得从数据库中提取数据并将其保存在文件中的最佳方法的任何建议。

4

2 回答 2

5
using (SqlConnection conn = new SqlConnection(connectionString))
{
    SqlCommand com = new SqlCommand("Select * from mytable", conn);
    DataReader reader = com.ExecuteReader();

    using (TextWriter writer = new TextWriter("myFile.txt"))
    {
        while (reader.Read())
        {
            StringBuilder myData = new StringBuilder();
            myData.Append(reader["Fname"].ToString();
            //etc - see how you want to format it

            writer.WriteLine(myData.ToString());
        }
    }
}
于 2012-10-25T16:14:48.050 回答
0

第一个解决方案:如果您只想使用 sql sever,则需要使用 bcp 命令。

您需要了解 bcp 的一些事实:

  1. 默认情况下,它连接到默认的 sql 实例,因此如果盒子上有多个 sql server 实例并且您希望从其他实例获取数据,则需要指定 server。
  2. 如果您使用存储过程来检索数据,则不能在其中使用临时表,只能使用变量表。
  3. 输出将以 UTF 16 格式输出,遗憾的是无法以 UTF 8 格式输出。

在这里您可以获得有关 bcp 的更多信息:http: //msdn.microsoft.com/en-us/library/ms162802 (v=sql.90).aspx

    ....

    SET @SQLQuery='bcp "EXEC storedprocedure  " queryout C:\SomeFolder\'+@FileName+ ' -w -r " " -t -T -C1252 -S '+@ServerName
    PRINT @SQLQuery

    EXEC @RC = master..xp_cmdShell @SQLQuery

    ....

第二种解决方案是使用 SSIS 包将其导出到文件中。

您将需要使用 DataFlowTask 并使用数据库源和平面文件目标。

SQL 2008 R2 的示例在这里,但我相信 2005 应该不会有太大不同:

http://www.kodyaz.com/ssis/export-to-text-file-using-ssis-package.aspx

Haedrian 建议使用编程语言的第三个解决方案。

于 2012-10-27T10:52:38.797 回答