Я пытаюсь передать параметры из приложения Windows в хранимую процедуру. есть два параметра «@dt» и «@ dt2», которые получают значение от datetimepickers. всякий раз, когда я выполняю хранимую процедуру, появляется сообщение об ошибке «Ошибка преобразования при преобразовании даты и времени из символьной строки».
После выполнения запроса я хочу отобразить его в datagridview.
я не могу понять проблему .. вот моя процедура и код
Хранимая процедура
ALTER proc [dbo]. [Deepak_proc]
(@dt datetime, @ dt2 datetime)
AS
объявить @cols AS 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,'')
установить @query
= '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;'
выполнить (@query)
И следующий код находится при нажатии кнопки
SqlConnection con = новый SqlConnection (); con.ConnectionString = @ "Источник данных =. \ SQLEXPRESS; Исходный каталог = test_db; ID пользователя = user; Пароль = пароль";
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 ("ММ / дд / гггг");
DataTable dt = новый DataTable ();
cmd.ExecuteNonQuery ();
sda.Fill (dt);
dataGridView1.DataSource = dt;
con.Close ();