2011-06-29 11 views
2

SQL Server 2000データベースからデータをエクスポートし、カンマ区切りのテキストファイルに書き込む簡単な方法を探しています。その1つのテーブルとわずか約1,000の行。私はC#の初心者ですので、もしこれが愚かな質問であれば私には容赦してください。SQLからデータをエクスポートしてetxtファイルに書き込む(BCPまたはSPは使用できません)

+0

おそらく、例を検索して特定の問題に戻ってみてください。これはまったく考えられません。 – ChrisBint

+0

私は例を探しましたが、Store procs、xp_cmdshell/BCP、さらにはSSIS/SSRSでも関係があります。 私はBCPを通してこれを行う方法を知っていますが、私の人生のために、私はC#になると失われています。 – Dave

答えて

0

これは、必要なツールを備えた他の言語と比べてもC#でも違いはありません。

1)クエリDBとコレクション
2)

+0

C#は私に全く新しいものです...あなたは簡単なチュートリアルこれを行う方法について? – Dave

0

は、WindowsフォームアプリケーションでこれをやっているCSV形式のファイルにコレクションを書くにおけるデータを格納しますか? DataGridViewなどのコントロールにデータをバインドした場合、これはかなり簡単です。コントロールをループして、そのようにファイルを書き込むことができます。私はこれが好きです。なぜなら、フィルタリングされたメカニズムをアプリケーションに実装した場合、フィルタされたユーザーをファイルに書き込むことができるからです。これは前に私がこれをした方法です。あまり問題なく何らかのコレクションを使用している場合は、これを微調整する必要があります。

private void exportCsv() 
    { 
     SaveFileDialog saveFile = new SaveFileDialog(); 
     createSaveDialog(saveFile, ".csv", "CSV (*csv)|*.csv)"); 
     TextWriter writer = new StreamWriter(saveFile.FileName); 
     int row = dataGridView1.Rows.Count; 
     int col = dataGridView1.Columns.Count; 

     try 
     { 
      if (saveFile.FileName != "") 
      { 
       for (int i = 0; i < dataGridView1.Columns.Count; i++) 
       { 
        writer.Write(dataGridView1.Columns[i].HeaderText + ","); 
       } 

       writer.Write("\r\n"); 
       for (int j = 0; j < row - 1; j++) 
       { 
        for (int k = 0; k < col - 1; k++) 
        { 
         writer.Write(dataGridView1.Rows[j].Cells[k].Value.ToString() + ","); 
        } 
        writer.Write("\r\n"); 
       } 
      } 
      MessageBox.Show("File Sucessfully Created!", "File Saved", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); 
     } 
     catch 
     { 
      MessageBox.Show("File could not be created.", "Save Error", MessageBoxButtons.OK, MessageBoxIcon.Error); 
     } 
     finally 
     { 
      writer.Close(); 
      saveFile.Dispose(); 
     } 

    } 
+0

私はdbの方が多いから始まったことはありません。 (Windowsアプリケーションのフォームではないので)彼らはちょうどここで言った...私たちはC#でそれを必要とし、来週の終わりまでにそれを必要とする。私は新しいことを学ぶのが大好きですが、巨大な痛みを始める場所はありません。 – Dave

6

これは非常に簡単な作業ですが、SqlClientの名前空間と自由に使用できるさまざまなオブジェクトを学習する必要があります。ただし、SQL Server 2000以降の非同期メソッドはサポートされていないため、すべてがブロックされることに注意してください。

これは非常に概略的な例ですが、これはテストしませんでしたが、これは一般的なアプローチの1つになります。

string connectionString = "<yourconnectionstringhere>"; 
using (SqlConnection connection = new SqlConnection(connectionString)) { 
    try { 
     connection.Open(); 
    } 
    catch (System.Data.SqlClient.SqlException ex) { 
     // handle 
     return; 
    } 
    string selectCommandText = "SELECT * FROM <yourtable>"; 
    using (SqlDataAdapter adapter = new SqlDataAdapter(selectCommandText, connection)) { 
     using (DataTable table = new DataTable("<yourtable>")) { 
      adapter.Fill(table); 
      StringBuilder commaDelimitedText = new StringBuilder(); 
      commaDelimitedText.AppendLine("col1,col2,col3"); // optional if you want column names in first row 
      foreach (DataRow row in table.Rows) { 
       string value = string.Format("{0},{1},{2}", row[0], row[1], row[2]); // how you format is up to you (spaces, tabs, delimiter, etc) 
       commaDelimitedText.AppendLine(value); 
      } 
      File.WriteAllText("<pathhere>", commaDelimitedText.ToString()); 
     } 
    } 
} 

あなたがに見たいと思うだろういくつかの資源:

私はまたあなたの要件が何であるかわからない、またはあなたがこの作業をしなければならない理由が、これであれば、すでにあなたのためにこれを行うことができますがツールうちのかなり多くが(おそらくもありますこれは珍しいことではないためです)。

+0

さて、感謝の情報...私は同意する、なぜ私のプレートに落ちたのか分からないが、私はちょうど学習経験としてそれを使用するつもりです。私たちがどれほど頻繁にこれを行うのかについては、ほとんど決してありません... – Dave

関連する問題