2015-02-17 3 views
-1

Я хочу напечатать выходные данные хранимой процедуры в CSV-файле. Когда я вставляю одну хранимую процедуру, такую ​​как
exec spGet Table 5 1,null,null,null,111,null,null,null,61,null,null,3;
Наряду с ее параметрами она выполняется. Но когда я передаю одну и ту же процедуру несколько раз с разными параметрами, она выполняет только первую хранимую процедуру, а остальные игнорируются. В CSV-файле я получаю только первый выход SP.Передать следующую строку как новую команду

Мой код выглядит следующим образом

public partial class Form1 : Form 
{ 
    public Form1() 
    { 
     InitializeComponent(); 
    } 

    private void btnGetSku_Click(object sender, EventArgs e) 
    { 
     Stopwatch swra = new Stopwatch(); 
     swra.Start(); 

     StreamWriter CsvfileWriter = new StreamWriter(@"D:\testfile.csv"); 
     string connectionString = null; 
     SqlConnection cnn; 
     connectionString = "Data Source=My-PC-Name;Initial Catalog=MyDB;User    
     cnn = new SqlConnection(connectionString); 
     ID=Name;Password=********"; 

     cnn.Open(); 

     SqlCommand cmd = new SqlCommand(textBox1.Text, cnn); 
     cmd.CommandText = textBox1.Text; 
     cmd.CommandType = CommandType.Text; 
     cmd.CommandTimeout = 2000; 
     using (cnn) 
     { 
      using (SqlDataReader rdr = cmd.ExecuteReader()) 
      using (CsvfileWriter) 
      { 
       //For getting the Table Headers 
       DataTable Tablecolumns = new DataTable(); 

       for (int i = 0; i < rdr.FieldCount; i++) 
       { 
        Tablecolumns.Columns.Add(rdr.GetName(i)); 
       } 
       CsvfileWriter.WriteLine(string.Join(",", 
       Tablecolumns.Columns.Cast<DataColumn>().Select(csvfile => 
       csvfile.ColumnName))); 

       while (rdr.Read()) 
       { 

        label1.Text = rdr["SKU"].ToString() + " " +  
         rdr["SKUCode"].ToString(); 
        CsvfileWriter.WriteLine(rdr["SKU"].ToString() + "," + 
       rdr["SKUCode"].ToString() + "," + 
        rdr["Compliance_Curr"].ToString() + "," + 
        rdr["Compliance_Prev"].ToString() + "," + 
      rdr["Difference"].ToString() + "," + 
      rdr["TotalSales_Curr"].ToString() + ","); 
       } 
       cnn.Close(); 

      } 
     } 
     swra.Stop(); 
     Console.WriteLine(swra.ElapsedMilliseconds); 
    } 

} 

Я хочу, чтобы убедиться, что каждая процедура выполняется по-разному, и добавляется в файл .csv ... Пожалуйста, помогите

+0

Где вы выполняете свой СП несколько раз в своем коде? –

+0

@RohitPrakash Я использую текстовое поле, в которое я помещаю свое выполнение хранимой процедуры вместе с ее параметрами. – user3818862

+0

Вы добавляете данные в свой файл или перезаписываете его каждый раз? – RePierre

ответ

0

Проблема, с которой вы сталкиваетесь, связана с перезаписью файла каждый раз. Итак, то, что у вас есть, на самом деле является результатом последнего выполнения команды.

Виновником является следующая строка:

StreamWriter CsvfileWriter = new StreamWriter(@"D:\testfile.csv"); 

Согласно documentation,

Если файл существует, то он перезаписывается; в противном случае создается новый файл.

Вы должны использовать overload из StreamWriter конструктор, который принимает bool значение, определяющее, следует ли добавить в файл или перезаписать его.

var csvFileWriter = new StreamWriter(@"D:\testfile.csv", true); 
+0

Эй, спасибо за ответ и время, которое вы потратили на решение моей проблемы. Что касается истины в StreamWriter, это помогло мне удовлетворить мое требование. Спасибо еще раз за ваши усилия. – user3818862

+0

@ user3818862, вы всегда рады! – RePierre

0

Вы пробовали звонить хранимую процедуру с именами параметров (объявленных в хранимой процедуре)?

Например: EXECUTE spGet @Id = 1, @Number = 111, @....

+0

Благодарим вас за ответ. Но это будет работать правильно для первого выполнения, но не поможет, когда я запустил второй или один после этого. – user3818862

0

В коде, вы создаете объект StreamWriter ** каждый раз, вы нажимаете на ** btnGetSku, попробуйте сделать его переменную-член, а затем писать. Данные не добавляются,

StreamWriter CsvfileWriter = null; 

private void btnGetSku_Click(object sender, EventArgs e) 
    { 
    Stopwatch swra = new Stopwatch(); 
    swra.Start(); 

    if(CsvfileWriter == null) 
     CsvfileWriter = new StreamWriter(@"D:\testfile.csv"); 
    string connectionString = null; 
    SqlConnection cnn; 
    connectionString = "Data Source=My-PC-Name;Initial Catalog=MyDB;User    
    cnn = new SqlConnection(connectionString); 
    ID=Name;Password=********"; 

    cnn.Open(); 

    SqlCommand cmd = new SqlCommand(textBox1.Text, cnn); 
    cmd.CommandText = textBox1.Text; 
    cmd.CommandType = CommandType.StoredProcedure; 
    cmd.CommandTimeout = 2000; 
    using (cnn) 
    { 
     using (SqlDataReader rdr = cmd.ExecuteReader()) 
     // Don't use using here. This disposes the streams 
     //using (CsvfileWriter) 
     { 
      //For getting the Table Headers 
      DataTable Tablecolumns = new DataTable(); 

      for (int i = 0; i < rdr.FieldCount; i++) 
      { 
       Tablecolumns.Columns.Add(rdr.GetName(i)); 
      } 
      CsvfileWriter.WriteLine(string.Join(",", 
      Tablecolumns.Columns.Cast<DataColumn>().Select(csvfile => 
      csvfile.ColumnName))); 

      while (rdr.Read()) 
      { 

       label1.Text = rdr["SKU"].ToString() + " " +  
        rdr["SKUCode"].ToString(); 
       CsvfileWriter.WriteLine(rdr["SKU"].ToString() + "," + 
      rdr["SKUCode"].ToString() + "," + 
       rdr["Compliance_Curr"].ToString() + "," + 
       rdr["Compliance_Prev"].ToString() + "," + 
     rdr["Difference"].ToString() + "," + 
     rdr["TotalSales_Curr"].ToString() + ","); 
      } 
      cnn.Close(); 

     } 
    } 
    swra.Stop(); 
    Console.WriteLine(swra.ElapsedMilliseconds); 
} 
Смежные вопросы