插入查询时出错

Posted

技术标签:

【中文标题】插入查询时出错【英文标题】:Getting Error while Inserting the Query 【发布时间】:2014-04-09 04:51:43 【问题描述】:

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

建表语句

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

【问题讨论】:

请展示表格及其变量 VALUES 后面有 2 个括号 @Nimesh 有什么好混淆的?我认为实际问题出在IsActive 字段上。 是的,看看我的回答 【参考方案1】:

首先检查每个字段的数据类型。并确保您根据表格使用了适当的数据类型。如果一切正常,请尝试以下查询。

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

【讨论】:

【参考方案2】:

您的查询中有两个错误,第一个是双括号,第二个是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/1) 值存储在数据库中。因此,您可以在查询中同时使用 Yes/No 和 0/1。 是的,它也有效。我现在该怎么办,我点击了@Mihai Hantea 作为答案。【参考方案3】:

更新:

推荐的方式是使用参数。使用参数化查询不仅可以解决 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));

你也应该使用参数。

【讨论】:

我试过你的代码。得到这个 exceotion Data type mismatch in criteria expression. IsActive 的类型是什么?如果是位,则应插入 1 或 0,而不是 "true" 作为字符串。 是,但在 Ms Access 数据库中,它的数据类型是 YesNo"。 感谢您抽出宝贵时间提出我的小问题。【参考方案4】:

你有一个错字:

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

一个括号,而不是两个。

【讨论】:

我试过你的代码,但得到错误Data type mismatch in criteria expression. 那是因为您使用了DateTime.Now.Date,这对 Access 没有任何意义。试试GETDATE() 什么的。【参考方案5】:

DateTime.Now.Date,你想知道日期吗?

试试这个:

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

【讨论】:

是的,我正在尝试获取日期。【参考方案6】:

试试这个,如果你放在双引号或单引号里面,日期时间是一个字符串,所以你需要查询的样子。

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

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

【讨论】:

以上是关于插入查询时出错的主要内容,如果未能解决你的问题,请参考以下文章

将数据插入 Hive 分区表时出错

将图片插入sql表时出错

SQL Server:插入 TempTable 时出错

在 PL/SQL 中插入 clob 数据时出错

SQL插入查询不按按钮存储

SQLite 插入约束字段时出错 - 为啥?