以下のバッチをc#で作り直し
set user=sa set password=manager set server=.\SQLEXPRESS set database=SbackupDB set input=.\Query.sql set output=.\OutPut\OutPut.csv @echo off cd /d %~dp0% sqlcmd -U %user% -P %password% -S %server% -d %database% -i %input% -o %output% -W -s , SET NOCOUNT ON; USE SbackupDB; 以下SQLクエリーです SELECT TABLE_NAME, COLUMN_NAME, DATA_TYPE, FROM INFORMATION_SCHEMA.COLUMNS ORDER BY TABLE_NAME, ORDINAL_POSITION; SELECT O.name, C.text FROM sys.objects AS O INNER JOIN syscomments AS C ON O.object_id = C.id AND O.is_ms_shipped <> 1 AND (O.type = 'P' OR O.type = 'V') ORDER BY O.name
バッチからだと一応動作しcsv形式で出力できています。
バッチの場合一定行数(4万行?)いくと一部正常に取得できないのでC#で作り直そうとしています。
static void Main(string[] args) { SqlConnection con = new SqlConnection(); // 接続文字列(サーバー名とユーザーID、パスワードを記述) //con.ConnectionString = @"Data Source=(.\SQLEXPRESS);Initial Catalog =(POS4U_Shimamura);User ID=(sa);Password=(manager);"; con.ConnectionString = @"Data Source=.\SQLEXPRESS;Initial Catalog =SbackupDB;User ID=sa;Password=manager;"; con.Open(); SqlCommand comm = con.CreateCommand(); //comm.Connection = con; // コマンドにSQLを設定する comm.CommandText = @"SELECT TABLE_NAME, COLUMN_NAME, DATA_TYPE, COLUMN_DEFAULT FROM INFORMATION_SCHEMA.COLUMNS ORDER BY TABLE_NAME, ORDINAL_POSITION"; var reader = comm.ExecuteReader(); using (StreamWriter writer = new StreamWriter("output.csv", false)) { while (reader.Read()) { writer.WriteLine(string.Format(",", reader[0], reader[1], reader[2], reader[3])); } } reader.Close(); comm.CommandText = @"SELECT O.name, C.text FROM sys.objects AS O INNER JOIN syscomments AS C ON O.object_id = C.id AND O.is_ms_shipped <> 1 AND (O.type = 'P' OR O.type = 'V') ORDER BY O.name"; reader = comm.ExecuteReader(); using (StreamWriter writer = new StreamWriter("output.csv", true)) { while (reader.Read()) { writer.WriteLine(string.Format(",",reader[0], reader[1])); } } reader.Close(); reader = null; // DB接続を閉じる con.Close(); con = null; }
できたCSVを見ると","しか出力されておらず、原因がよくわかりません。
そもそもC#の経験がそんなにないので接続方法もし調べながらの感じで作成しました。
SQLはSQLserver
VisualStudioは2015です
よろしくお願いいたします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/04/04 07:18