2014-01-27 5 views
0

У меня есть метод, который требует 3 строки так:Как преобразовать DateTime в строку?

public <List> MethodName(string date1, string date2, string number) 
{ 
    // 
} 

в моей базе данных date1 и date2 хранятся в DateTime и номер хранится в виде Int так, как бы я написать запрос SQL, который будет искать на основе этих трех параметры?

Я преобразовал мою date1 и date2 так:

DateTime firstdate = Convert.ToDateTime(date1); 
string fdate = firstdate.ToLongDateString(); 
    DateTime seconddate = Convert.ToDateTime(date1); 
string sdate = seconddate .ToLongDateString(); 

Мой SQL запрос:

SELECT * From TableName 
    WHERE [Time] > @date1 AND 
    [Time] < @date2 AND [StaffCode] [email protected]; 

command.Parameters.AddWithValue("@date1", fdate); 
command.Parameters.AddWithValue("@date2", sdate); 

command.Parameters.AddWithValue("@StaffCode", number); 
conn.Open(); 
     SqlDataReader reader = command.ExecuteReader(); 
     while (reader.Read()) 
     { get the data ...} 

Я уверен, что мой SQL-запрос неправильно.

ответ

0

Конверсия:

   DateTime firstdate = Convert.ToDateTime(date1); 
      string fdate = firstdate.ToString("yyyy-MM-dd"); 

      DateTime firstdate2 = Convert.ToDateTime(date2); 
      string fdate2 = firstdate2.ToString("yyyy-MM-dd"); 

SQL запросов:

  @"SELECT * From TestTable WHERE Time BETWEEN CONVERT(Date,@date1) AND CONVERT(Date,@date2) AND StaffCode=CONVERT(int,@StaffCode)" 
      command.Parameters.AddWithValue("@date1", fdate); 
      command.Parameters.AddWithValue("@date2", fdate2); 
      command.Parameters.AddWithValue("@StaffCode", number); 
+0

Я получаю сообщение об ошибке. Должен объявить скалярную переменную «@ date2». –

+0

, пожалуйста, дайте мне значение date1 и date2 –

+1

, он работает, я забыл что-то изменить. спасибо –

5

Поскольку столбцы базы данных уже строго типизированы, просто убедитесь, что ваши параметры C# напечатаны как System.DateTime и int (System.Int32), прежде чем связывать их с вашим запросом. Ваш SQL затем просто:

SELECT col1, col2, col3 
FROM TableName 
WHERE [Time] > @date1 AND 
     [Time] < @date2 AND [StaffCode] [email protected]; 

Если учесть включая даты, вы можете использовать BETWEEN, т.е.

WHERE [Time] BETWEEN @date1 AND @date2 
    AND [StaffCode] = @StaffCode 

т.е. избежать необходимости convert a Date to a string вообще. Там, где это возможно, попробуйте и сохраните сильную систему типов через ваш код, как C#, так и SQL - это сэкономит много боли при конвертации. например если это возможно, если вы можете изменить подпись:

public List<MethodName>(DateTime date1, DateTime date2, int number) 
{ 
    // Bind the DateTimes, not a string! 
    command.Parameters.AddWithValue("@date1", date1); 
    command.Parameters.AddWithValue("@date2", date2); 
    command.Parameters.AddWithValue("@StaffCode", number); 

Edit Не используйте SELECT * - используйте SELECT Col1, Col2, ...

+0

не работает? command.Parameters.AddWithValue ("@ date1", date1) - для всех трех я получаю введенное значение, но в моем читателе его показывает null? и где бы я включил System.int32? Я обновил свой вопрос, показывая, как я это сделал. –

+0

C# тип 'int' совпадает с типом .net' System.Int32'. Можете ли вы предоставить больше информации w.r.t. 'читатель показывает null' (вы вызываете 'ExecuteReader', а затем пытаетесь привязать данные к результату?) – StuartLC

+0

yes Я использую ExecuteReader. –

Смежные вопросы