Windows アプリケーションからストアド プロシージャにパラメーターを渡そうとしています。datetimepickers から値を取得する 2 つのパラメーター「@dt」と「@dt2」があります。ストアドプロシージャを実行するたびに、「文字列から日時を変換するときに変換に失敗しました」というエラーが表示されます。
クエリを実行した後、データグリッドビューに表示したいと思います。
私は問題を理解することができません..ここに私の手順とコードがあります
ストアド プロシージャ
ALTER proc [dbo].[deepak_proc]
( @dt 日時、@dt2 日時)
なので
@cols を NVARCHAR(MAX) として宣言します。
@query AS NVARCHAR(MAX) を宣言します
@cols = を選択
STUFF((SELECT ',' + QUOTENAME(date +'_'+Logname) from ( select K_date, convert(char(10),K_date, 101) date, LogName from kq_report_analyze cross apply ( select 'In' LogName union all select 'Out' ) l ) s group by convert(char(10), K_date, 112), date, Logname order by convert(char(10), K_date, 112) FOR XML PATH(''), TYPE ).value('.', 'NVARCHAR(MAX)') ,1,1,'')
@クエリを設定
= 'SELECT empid, name, status, '+@cols+' FROM (SELECT empid, name, status, doortime, date + "_" + col AS col_names FROM (SELECT k_userid AS [empid], K_Name AS name, k_description1 as [status], K_WorktimeUp1 AS [IN], K_WorktimeDown1 AS OUT, CONVERT(char(10), K_Date, 101) AS date FROM dbo.kq_report_analyze WHERE (K_Date BETWEEN '+@dt+' AND '+@dt2+') GROUP BY K_UserID, K_Name, k_description1, K_Date, K_WorktimeUp1, K_WorktimeDown1) src UNPIVOT (doortime FOR col IN ([IN], [OUT])) unpiv) p PIVOT (max(doortime) FOR col_names IN ('+@cols+')) piv;'
実行(@クエリ)
そして、次のコードはボタンクリック時です
SqlConnection con = new SqlConnection(); con.ConnectionString = @"データ ソース=.\SQLEXPRESS;初期カタログ=test_db;ユーザー ID=user;パスワード=password";
con.Open(); SqlCommand cmd = new SqlCommand("deepak_proc", con); cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add("@dt", SqlDbType.DateTime).Value = dateTimePicker1.Value.ToString("MM/dd/yyyy");
cmd.Parameters.Add("@dt2", SqlDbType.DateTime).Value = dateTimePicker2.Value.ToString("MM/dd/yyyy");
DataTable dt = 新しい DataTable();
cmd.ExecuteNonQuery();
sda.Fill(dt);
dataGridView1.DataSource = dt;
con.Close();