2013-05-18 113 views
-1

,当我尝试插入datetime值到SQL Server数据库中,我得到这个错误:插入日期时间从C#为SQL Server数据库

Conversion failed when converting date and/or time from character string

代码:

connection.Open(); 
SqlCommand command = new SqlCommand("insert into table values(@time)", connection); 
command.Parameters.AddWithValue("@time", DateTime.Now); 
command.ExecuteNonQuery(); 
connection.Close(); 

table有1个datetime列称为time

编辑:
我的表在MSSQL 2012创建:http://i.imgur.com/TJ3t3y7.png
我真正的代码是:

public void vytvorDotaz(String uzivatel, DateTime cas, String nazev, String dotaz) 
    { 
     int id = getMaxID() + 1; 
     connection.Open(); 
     SqlCommand command = new SqlCommand("insert into otazky values('" + id + "', '" + uzivatel + "', '0','0','0','@cas','" + nazev + "','" + dotaz + "')", connection); 
     command.Parameters.AddWithValue("@cas", DateTime.Now); 
     command.ExecuteNonQuery(); 
     connection.Close(); 
    } 
+2

你的插入语句是否真的有**一个**单引号或者是一个错误类型? –

+0

备注:从SQL Server ** 2008 **开始,有一个名为'TIME'的新数据类型 - 仅仅调用'time'列是非常糟糕的想法 - 使用更有意义,更有表现力的东西! –

+0

请写出实际的SQL,而不是该问题的dummy-sql。另外,你试图存储DateTime的列的类型是什么? –

回答

2

这里的实际问题是,你写引号内的参数:

... ,'0','@cas',' ... 
     ^^

这不会使用@cas作为参数,你实际上是试图插入字符串“@cas”成该列,而不是参数@cas的内容。

删除引号,该部分应该工作。

此外,不要使用字符串连接来构建SQL,为所有事情使用参数,从SQL注入攻击或引号或什么都不需要头疼。这与你正在使用的“id”,“uzivatel”,“nazev”和“dotav”参数有关(方法参数是)。

2

看起来像你需要:

insert into table values(@time) 

没有单个字符的报价。

+0

啊我很抱歉,这个错误是我在清除代码时(通常我有超过1个参数)所做的......我的问题是将asp日期转换为SQL日期时间....我编辑了代码,但thnx – Eleer

0

尝试System.Data.SqlTypes.SqlDateTime另外,当存储日期时,请考虑将它们存储为UTC以防止混淆。

+0

我错过了@Darren所提到的单引号,这很可能是问题所在。 –

相关问题