2014-04-09 80 views
0

请帮助我在下面的语句中发现错误,其中仅从代码中获取错误。插入查询时发生错误

CREATE TABLE语句

cmmd.CommandText = "CREATE TABLE Users([User_ID] AUTOINCREMENT PRIMARY KEY, UserName Text(50), UserPwdText(200), [IsActive] YesNo, [ModBy] Long REFERENCES Users (User_ID), [ModDate] Date)"; 
cmmd.ExecuteNonQuery(); 

在成功创建数据库表。
我在这里通过代码插入值。

cmmd.CommandText = @"INSERT INTO Users ([UserName], [UserPwd], [IsActive], [ModBy], 
      [ModDate])VALUES('Admin','kov1ozyKAjas8awoej3oijhrqoi6q=', 'true', '1', 
      'Datetime.Now.Date')"; 
cmmd.ExecuteNonQuery(); 

唯一的例外是

Data type mismatch in criteria expression

+0

请显示出与它的变量 –

+1

有价值观后2个括号 –

+1

@Nimesh什么有混淆表?我认为实际问题在于'IsActive'字段。 – Sanjeev4evr

回答

2

更新:

推荐的方法是使用参数。使用参数化查询不仅可以解决SQL注入问题,还可以解决SQL Server日期本地化问题。

SqlCommand cmd = new SqlCommand(@"INSERT INTO Users ([UserName], [UserPwd], [IsActive], [ModBy], [ModDate])VALUES('Admin','kov1ozyKAjas8awoej3oijhrqoi6q=', 'true', '1', @dateValue)"); 
cmd.Parameters.AddWithValue("@dateValue", DateTime.Now.Date); 
....... 
// do same for the other. 

有价值观后2个括号中的代码

检查:

string format = "yyyy-mm-dd"; //or with date yyyy-mm-dd hh:mm:ss 
cmmd.CommandText = string.Format(@"INSERT INTO Users ([UserName], [UserPwd], [IsActive], [ModBy], [ModDate])VALUES('Admin','kov1ozyKAjas8awoej3oijhrqoi6q=', 'true', '1', '{0}')", DateTime.Now.Date.ToString(format)); 

而且你应该使用的参数。

+0

我试过你的代码。得到了这种特殊情况'标准表达式中的数据类型不匹配。' – Sanjeev4evr

+1

IsActive的类型是什么?如果是你应该插入1或0,而不是“真”作为字符串。 –

+0

是的,但是在Ms Access数据库中它的数据类型是YesNo“ – Sanjeev4evr

2

你有一个错字:

cmmd.CommandText = @"INSERT INTO Users ([UserName], [UserPwd], [IsActive], [ModBy], [ModDate])VALUES('Admin','kov1ozyKAjas8awoej3oijhrqoi6q=', 'true', '1', 'Datetime.Now.Date')"; 

一个括号,而不是两个。

+0

我试过你的代码,但在标准表达式中出现错误'数据类型不匹配。' – Sanjeev4evr

+0

这将是由于你使用'DateTime.Now.Date',这意味着什么访问。试试'GETDATE()'或其他什么。 –

2

随着DateTime.Now.Date,你试图获得日期?

试试这个:

所有检查的每个字段的数据类型的
cmmd.CommandText = @"INSERT INTO Users ([UserName], [UserPwd], [IsActive], [ModBy], [ModDate]) VALUES ('Admin', 'kov1ozyKAjas8awoej3oijhrqoi6q=', 'true', '1', Datetime.Now.Date)"; 
cmmd.ExecuteNonQuery(); 
+0

是的,我试图找到日期。 – Sanjeev4evr

5

第一。并确保您已按照表使用适当的数据类型。如果everythings确定,然后试试下面的查询。

cmmd.CommandText = @"INSERT INTO Users ([UserName], [UserPwd], [IsActive], 
      [ModBy],[ModDate])VALUES('Admin','kov1ozyKAjas8awoej3oijhrqoi6q=', 
      'true', '1', 'Datetime.Now.Date')"; 
cmmd.ExecuteNonQuery(); 
1

试试这个,datetime是一个字符串,如果你把双引号或单引号放在里面,那么你需要查询的样子。

cmmd.CommandText = @"INSERT INTO Users ([UserName], [UserPwd], [IsActive], 
      [ModBy],[ModDate])VALUES('Admin','kov1ozyKAjas8awoej3oijhrqoi6q=', 
      'true', '1', '" + DateTime.Now.Date + "')"; 
        cmmd.ExecuteNonQuery(); 

我希望我的查询不会返回任何错误。

4

查询首先有两个错误是双括号,第二个错误是DateTime.Now.Date。它是一个.Net功能,你不能在字符串中执行它。在这里,你不需要在字符串的开头添加@。也改变'True' to Yes

试试这个

cmmd.CommandText = "INSERT INTO Users ([UserName], [UserPwd], [IsActive], 
      [ModBy],[ModDate])VALUES('Admin','kov1ozyKAjas8awoej3oijhrqoi6q=', 
      Yes, '1', Date())"; 
cmmd.ExecuteNonQuery(); 
+0

而不是'Yes'我​​用''0''。它的工作原理 – Sanjeev4evr

+2

基本上你的是/否字段在数据库中存储位(0/1)的值,所以你可以在查询中使用是/否和0/1 – Shell

+0

是的它也有效,我现在应该做什么,我点击@ Mihai Hantea作为回答。 – Sanjeev4evr