我的SQL Server 2008数据库有一个表格,其数据类型为datetime
。
当我尝试将值插入datetime
列时,我收到错误。
' - '
附近的语法不正确
我的日期时间选择器具有自定义格式yyyy-MM-dd
,例如(2012-11-01)
以下是我用来插入datetime
的代码示例。
System.DateTime myDate = default(System.DateTime);
myDate = DateTimePickerPrint.Value;
string query = string.Format("EXEC Save_Quotation_Bookshop '" + txt_QutationNo.Text + "','" + txt_CusCode.Text + "',#" + myDate + "#,");
请有人有个主意吗?
答案 0 :(得分:1)
用单引号括起日期而不是#。
此字符串连接是等待发生的SQL注入。使用带有参数的SqlCommand,然后您不必担心字符串转换问题
答案 1 :(得分:1)
首先关闭:停止将SQL代码连接在一起!这是对SQL注入攻击的邀请,它对性能也非常不利 - 改为使用参数化查询。
如果你这样做 - 你就不会遇到日期时间/字符串转换问题......
其次:SQL Server中仅日期DateTime
的“安全”格式为YYYYMMDD
- 没有任何破折号 - 只有这种格式才能保证它会运行在任何SQL Server上,无论您的语言,区域和日期格式设置如何。
第三。如果你想执行存储过程 - 我建议使用这种方法:
System.DateTime myDate = default(System.DateTime);
myDate = DateTimePickerPrint.Value;
using (SqlConnection con = new SqlConnection(your-connection-string-here))
using (SqlCommand cmd = new SqlCommand("dbo.Save_Quotation_Bookshop", con))
{
// tell ADO.NET it's a stored procedure (not inline SQL statements)
cmd.CommandType = CommandType.StoredProcedure;
// define parameters
cmd.Parameters.Add("@QuotationNo", SqlDbType.VarChar, 50).Value = txt_QutationNo.Text;
cmd.Parameters.Add("@CustomerCode", SqlDbtype.VarChar, 25).Value = txt_CusCode.Text;
cmd.Parameters.Add("@SaleDate", SqlDbType.DataTime).Value = myDate;
// open connection, execute stored procedure, close connection again
con.Open();
cmd.ExecuteNonQuery();
con.Close();
}
不要将EXEC ......
用作内联SQL语句 - 告诉ADO.NET您正在执行存储过程,提供参数 - 然后就完成了!
答案 2 :(得分:0)
试试这个
string query = String.Format("EXEC Save_Quotation_Bookshop '{0}','{1}','{2}'",txt_QutationNo.Text,txt_CusCode.Text, myDate);
OR
string query = string.Format("EXEC Save_Quotation_Bookshop @QutationNo,@CusCode,@myDate");
...
comm.Parameters.AddWithValue("@QutationNo", txt_QutationNo.Text);
comm.Parameters.AddWithValue("@CusCode", txt_CusCode.Text);
comm.Parameters.AddWithValue("@myDate", myDate);