我有下一个代码C#:
cm.CommandText = "Select * from H_Facturi_Clienti where Serie like '" + TextBox1.Text + "%' and Numar like '" + textBox2.Text + "%' and Data >= '"+dateTimePicker1.Text+"'";
我知道这不起作用,因为我的datetimepicker是短格式:dd/MM/yyyy
而sql中的Data
是smalldatetime
:yyyy/MM/dd hh:mm:ss
答案 0 :(得分:2)
您有一个bad habits to kick,您尝试将string
发送到键入smalldatetime
的列。
直接发送<{1}}属性 ,而不是它的字符串表示。
但更重要的是,您应该始终使用parameterized queries。这种字符串连接对SQL Injection攻击开放。
Value
同样using(var con = new SqlConnection(conStr))
using(var cm = con.CreateCommand())
{
cm.CommandText = @"Select * from H_Facturi_Clienti
where Serie like @serie and Numar like @numar and Data >= @data";
cm.Parameters.Add("@serie", SqlDbType.NVarChar).Value = TextBox1.Text + "%";
cm.Parameters.Add("@numar", SqlDbType.NVarChar).Value = textBox2.Text + "%";
cm.Parameters.Add("@data", SqlDbType.SmallDateTime).Value = dateTimePicker1.Value;
// Do whatever you want
}
非常糟糕。阅读Why is SELECT *
considered harmful?
最后,SELECT *
(忽略它&#39;案例)在SQL Server的未来版本中可能是reserved keyword。您可能希望将其用作Data
,但作为最佳做法,请将其更改为非 - 保留字。