2014-09-24 2 views
-17

Как создать файл csv с выводом запроса sql (SQLServer) в C#?Как создать файл csv с выходом sql-запроса?

Вот код, который я пытался до сих пор:

public static void CreateManifestFile(string SQLFileToExecute, string ConnectionString, StreamWriter logfile) 
{ 
    int success = 0; 
    List<string> results = new List<string>(); 
    string script = File.ReadAllText(@SQLFileToExecute); 
    Logging.WriteToLog(" ", logfile); 
    Logging.WriteToLog(" ", logfile); 
    Logging.WriteToLog("=== Processing file: [" + SQLFileToExecute + "] ===", logfile); 

    // split script on GO command 
    IEnumerable<string> commandStrings = Regex.Split(script, @"^\s*GO\s*$", RegexOptions.Multiline | RegexOptions.IgnoreCase); 

    SqlConnection Connection = new SqlConnection(ConnectionString); 
    Connection.Open(); 

    Connection.InfoMessage += delegate(object sender, SqlInfoMessageEventArgs e) 
    { 
     Logging.WriteToLog("Msg: " + e.Message, logfile); 
     success = 1; 
    }; 
    SqlCommand sqlcmd = new SqlCommand(); 
    sqlcmd.Connection = Connection; 
    foreach (string commandString in commandStrings) 
    { 
     if (commandString.Trim() != "") 
     { 
      success = 0; 
      Console.WriteLine(commandString.ToString()); 
      logfile.WriteLine(commandString.ToString()); 
      results.Add(sqlcmd.ExecuteReader(commandString)); 
      if (success == 0) 
      { 
       Logging.WriteToLog("Command executed successfully.", logfile); 
      } 
     } 
    } 
    Connection.Close(); 
    int length = results.Count; 
    string delimter=","; 
    using(System.IO.TextWriter writer = File.CreateText("manifest.csv")) 
    { 
     Logging.WriteToLog("manifest count:" + length, logfile); 
     for(int index = 0; index < length; index++) 
     { 
      writer.WriteLine(string.Join(delimter,results[index])); 
     } 
    } 

} 

Но я получаю ошибки на линии:

results.Add(sqlcmd.ExecuteReader(commandString)); 

Ошибки:

Error 1 Лучший перегружен метод для 'System.Collections.Generic.List.Add (string)' имеет некоторые недопустимые аргументы

Ошибка 2 Аргумент 1: не может конвертировать из 'System.Data.SqlClient.SqlDataReader' на 'строка'

Error 3 Лучший перегруженный метод подходит для «System.Data.SqlClient.SqlCommand.ExecuteReader (System.Data.CommandBehavior)» имеет некоторые недопустимые аргументы

Ошибка 4 Аргумент 1: не удается преобразовать из 'строка' в 'System.Data.CommandBehavior'

Я Fol this post, чтобы сделать это.

+5

Вы что-то пробовали? –

+2

Извините, но '-1' за нулевое усилие. –

+1

Если у вас есть какие-либо проблемы, отправьте свой код или то, что вы пробовали до сих пор. – Taosique

ответ

0

Вы ничего не пробовали, поэтому вот немного мотивации, чтобы вы начали.

SqlServerStorage storage = new SqlServerStorage(typeof(Order)); 
string sqlConnectionString ="Server=SqlServer;Database=SqlDataBase;Trusted_onnection=True"; 
storage.ConnectionString = sqlConnectionString; 
storage.SelectSql = "select * from Yourtable"; 
storage.FillRecordCallback = new FillRecordHandler(FillRecordOrder); 
FileDataLink link = new FileDataLink(storage); 
link.FileHelperEngine.HeaderText = headerLine; 
link.ExtractToFile("file.csv"); 

Это даст вам тайм-аут для таблиц, содержащих большие объемы данных, но эй я немного меньше ленивый, чем вы. Так что выясните это. Надеюсь, это поможет удачи.

1
public string ExportToCSVFile(DataTable dtTable) 
{ 
    StringBuilder sbldr = new StringBuilder(); 
    if (dtTable.Columns.Count != 0) 
    { 
     foreach (DataColumn col in dtTable.Columns) 
     { 
      sbldr.Append(col.ColumnName.Replace(",", "") + ','); 
     } 
     sbldr.Append("\r\n"); 
     foreach (DataRow row in dtTable.Rows) 
     { 
      foreach (DataColumn column in dtTable.Columns) 
      { 
       sbldr.Append(row[column].ToString().Replace(",", "").Trim() + ','); 
      } 
      sbldr.Append("\r\n"); 
     } 
    } 
    return sbldr.ToString(); 
} 
Смежные вопросы