Sqldataadapter не заполняет datatable.
Этот код не работает. когда я отлаживаю код построчно, то сталкиваюсь с проблемой преобразования. система показывает ошибку "преобразование varchar в datetime находится за пределами диапазона (что-то в этом роде)".
Что я уже пробовал:
public DataTable GetAllSessionForDoctor(DateTime dtsession, long locationId) { SqlCommand cmd = new SqlCommand(); SqlConnection con = new SqlConnection(Properties.Settings.Default.HMSCon); string str = "SELECT tblEmployee.Employeeid, tblEmployee.EmployeeName + ' ' + tblEmployee.MiddleName + ' ' + tblEmployee.LastName AS [Doctor Name] " + " FROM tbluserType INNER JOIN tblEmployee ON tbluserType.utid = tblEmployee.type INNER JOIN " + " sessionDoctor ON tblEmployee.Employeeid = sessionDoctor.doctorID INNER JOIN sessionOPD ON sessionDoctor.sessionID = sessionOPD.sessionId INNER JOIN " + " tblDoctorCategory ON sessionDoctor.doctorID = tblDoctorCategory.doctorId WHERE (sessionOPD.sessionDate = '" + dtsession + "') AND (tblEmployee.LocationId = " + locationId + ") AND (tbluserType.CEP = 'true') and (tblemployee.EndJob = 'false')"; SqlDataAdapter da = new SqlDataAdapter(str, con); DataTable dt = new DataTable(); try { con.Open(); da.Fill(dt); //MessageBox.Show(dt.ToString()); } catch (Exception ex) { throw new Exception(ex.Message); } finally { con.Close(); } return dt; //MessageBox.Show(dt.ToString()); }
F-ES Sitecore
Для построения запроса используйте параметризованные запросы, а не конкатенацию строк. Что само по себе может сделать и проблема исчезнет.
Чтобы опередить ваш следующий вопрос, google "c# ado.net paramterised query", чтобы узнать, как это сделать.
Member 13922470
Спасибо за ваш ответ, но первое, что этот код уже сделал кто-то другой. я работаю над чужим кодом, поэтому не могу делать DROP и DELETE. пожалуйста, дайте мне какое-нибудь другое решение. Еще раз заранее спасибо
F-ES Sitecore
Вам вообще не нужно изменять базу данных, просто обновите код.
Member 13922470
Итак, каков наилучший вариант решения этой проблемы, сэр?
F-ES Sitecore
Я и OriginalGriff уже говорили вам...используйте параметризованные запросы, а не стройте инструкцию SQL в виде одной строки.
Richard Deeming
const string str = "SELECT tblEmployee.Employeeid, tblEmployee.EmployeeName + ' ' + tblEmployee.MiddleName + ' ' + tblEmployee.LastName AS [Doctor Name] " + " FROM tbluserType INNER JOIN tblEmployee ON tbluserType.utid = tblEmployee.type INNER JOIN " + " sessionDoctor ON tblEmployee.Employeeid = sessionDoctor.doctorID INNER JOIN sessionOPD ON sessionDoctor.sessionID = sessionOPD.sessionId INNER JOIN " + " tblDoctorCategory ON sessionDoctor.doctorID = tblDoctorCategory.doctorId WHERE (sessionOPD.sessionDate = @dtsession) AND (tblEmployee.LocationId = @locationId) AND (tbluserType.CEP = 'true') and (tblemployee.EndJob = 'false')"; SqlDataAdapter da = new SqlDataAdapter(str, con); da.SelectCommand.Parameters.AddWithValue("@dtsession", dtsession); da.SelectCommand.Parameters.AddWithValue("@locationId", locationId);