插入查询时出错

时间:2014-04-09 04:51:44

标签: c# sql winforms ms-access

请帮我在下面的语句中找到错误,我只是从代码中收到错误。

创建表语句

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

6 个答案:

答案 0 :(得分:5)

首先检查每个Fields的DataTypes。并确保您已根据表使用了适当的DataTypes。如果每个人都好,那么只需尝试以下查询。

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

答案 1 :(得分: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();

答案 2 :(得分:2)

你有一个错字:

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

一个括号,而不是两个。

答案 3 :(得分:2)

使用DateTime.Now.Date,您是否想要获取约会?

试试这个:

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

答案 4 :(得分: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.

您的代码中的VALUES后面有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));

你也应该使用参数。

答案 5 :(得分:1)

试试这个,如果你把双引号或单引号放在里面,datetime是一个字符串,所以你需要查询看起来像。

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

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