自己投資としてチャレンジしている内容を Blog で公開しています。
今回は C# で SQL Server に接続し Select 結果を CSV ファイルに保存する方法について紹介します。
Summary
▼1. SQL Server on Ubntu への接続および Select 結果をファイルに保存
本 blog では以前 Java および Python による、SQL Server への接続および検索結果のファイル保存について紹介していましたが、今回 C# を使て実現したいと思います。
▼2. 事前準備
Ubuntu 20.4 で Visual Studio Code 開発環境にて C# を使い SQL Server へ接続する環境の構築方法は以下を参考にしてください。
C# SQL Server on Ubuntu20.04 に接続する方法 VS Code No.104
▼3. SQLClient で SQL Server に接続し Select 結果を CSVファイルに出力する C# コード
3-1. C# コードを作成
C# のコード Program.cs を作成します。環境に合わせてパラメータを変更します。
using System;
using System.Data.SqlClient;
namespace ConsoleApp1
{
class Program
{
static void Main(string[] args)
{
try
{
// Build connection string
SqlConnectionStringBuilder builder = new SqlConnectionStringBuilder();
builder.DataSource = "localhost";
builder.UserID = "sa";
builder.Password = "password123";
builder.InitialCatalog = "sampledb1";
// set path to local file
string localpath = @"/home/xxx/TestApp2301/data.csv";
// Connect to SQL
Console.Write("Connecting to SQL Server ... ");
using (SqlConnection connection = new SqlConnection(builder.ConnectionString))
{
connection.Open();
Console.WriteLine("Done.");
// execute select query
String sql = "SELECT id, cdatetime, note FROM sampletb";
using (SqlCommand command = new SqlCommand(sql, connection))
{
using (SqlDataReader reader = command.ExecuteReader())
{
// save data to csv file
using (System.IO.StreamWriter file = new System.IO.StreamWriter(localpath))
{
while (reader.Read())
{
file.WriteLine("{0},{1},{2}", reader.GetInt32(0), reader.GetDateTime(1), reader.GetString(2));
}
}
}
}
}
}
catch (SqlException e)
{
Console.WriteLine(e.ToString());
}
}
}
}
3-2. 実行結果
エラーなく実行した結果が以下です。data.csv のファイルが作成されます。
dotnet run
Connecting to SQL Server ... Done.
出力された data.csv ファイルの中身を確認。
cat data.csv
3366109,12/9/2022 1:59:12 PM,int
3366109,12/9/2022 1:59:12 PM,mcranentiv
6732218,12/9/2022 1:59:12 PM,orlsojlvuu
10098327,12/9/2022 1:59:12 PM,uaclnlkehv
13464436,12/9/2022 1:59:12 PM,xngcehsmtc
16830545,12/9/2022 1:59:12 PM,llvzgooqaa
20196654,12/9/2022 1:59:12 PM,atmordnpfz
23562763,12/9/2022 1:59:12 PM,qpzlferdra
26928872,12/9/2022 1:59:12 PM,lnbjlmclxx
30294981,12/9/2022 1:59:12 PM,xfspqvetbf
0,12/9/2022 1:59:12 PM,Description
852,1/7/2023 4:07:53 PM,Description