插入查询时出错

本文关键字:出错 查询 插入 | 更新日期: 2023-09-27 17:57:41

请帮助我在以下语句中查找错误,其中我只从代码中得到错误。

创建表语句

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

插入查询时出错

首先检查每个字段的数据类型。并确保根据表使用了适当的DataTypes。若一切都好,那个么就试试下面的查询。

cmmd.CommandText = @"INSERT INTO Users ([UserName], [UserPwd], [IsActive], 
            [ModBy],[ModDate])VALUES('Admin','kov1ozyKAjas8awoej3oijhrqoi6q=',
            'true', '1', 'Datetime.Now.Date')";
cmmd.ExecuteNonQuery();
查询中有两个错误,第一个是双括号,第二个是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();

更新:

建议使用参数。使用参数化查询不仅解决了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后面有两个括号

检查此项:

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));

此外,您还应该使用参数。

您有一个打字错误:

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

一个括号,而不是两个。

使用DateTime.Now.Date,您是否正在尝试获取日期?

试试这个:

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

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

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

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