.net中插入Access数据库提示:标准表达式中数据类型不匹配。

wndsc 2009-06-23 03:46:25
在数据库可以执行的SQl语句,
在。net后台调用时 提示:
标准表达式中数据类型不匹配。
是什么原因?
INSERT INTO News ( Title, Content, CreateTime, Url, NewTypeId )
VALUES ([@Title], [@Content], [@CreateTime], [@Url], [@NewTypeId]);



OleDbParameter[] odp = new OleDbParameter[]
{
new OleDbParameter("@Title",n.Title),
new OleDbParameter("@Content",n.Content),
new OleDbParameter("@CreateTime",n.CreateTime),
new OleDbParameter("@Url",n.Url),
new OleDbParameter("@NewTypeId",n.NewTypeId.NewTypeId)
};

string str = "INSERT INTO News ( Title, Content, CreateTime, Url, NewTypeId ) VALUES('@Title','@Content','@CreateTime','@Url','@NewTypeId')";
return DBHelper.ExecuteNonQuery(CommandType.text, str , odp);
...全文
435 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
winner2050 2009-06-28
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 wndsc 的回复:]
可是数据库里面就是日期格式,
我是帮人家整合的,我改了日期格式为字符串
数据库就麻烦啦,应为别人也用的这个 汗水-_-!哦
[/Quote]


我们叫你改一下录入的代码,不是改数据库的字段格式。

录入进数据库还是日期型格式的。
wndsc 2009-06-28
  • 打赏
  • 举报
回复
呵呵 谢谢你熊猫 看~@^_^@~
Adechen 2009-06-24
  • 打赏
  • 举报
回复
'@Title'应该去掉单引号,否则当成字符串了
foxlinda123 2009-06-24
  • 打赏
  • 举报
回复
路过,学习了
jueyingfd 2009-06-24
  • 打赏
  • 举报
回复
'@Title' 去掉'号,应该就没问题了
zyug 2009-06-24
  • 打赏
  • 举报
回复
无聊,顺便写了一个demo给你,可以看一下

string path = @"C:\Inetpub\fojiao\db\fsz.mdb";
string olecs = string.Format("Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0}", path);
OleDbConnection oleCon = new OleDbConnection(olecs);
oleCon.Open();
OleDbCommand com = oleCon.CreateCommand();
com.CommandText = "insert into [messages]([Title],[Content],[AddTime],[Click],[OrderIndex]) values(?,?,?,?,?)";
com.Parameters.Add(new OleDbParameter("Title", OleDbType.VarWChar, 50, "title"));
com.Parameters.Add(new OleDbParameter("Content", OleDbType.LongVarChar, 2000, "Content"));
com.Parameters.Add(new OleDbParameter("AddTime", OleDbType.VarWChar, 20, "AddTime"));
com.Parameters.Add(new OleDbParameter("Click", OleDbType.Integer, 4, "Click"));
com.Parameters.Add(new OleDbParameter("OrderIndex", OleDbType.Integer, 4, "OrderIndex"));
com.Parameters["title"].Value = "zjshizhu haha ";
com.Parameters["Content"].Value = "zjshizhu hahahahahahahahahahahahahaha ";
com.Parameters["AddTime"].Value = "2009 04-17 20:59:58";
com.Parameters["Click"].Value = 1;
com.Parameters["OrderIndex"].Value = 1;
com.ExecuteNonQuery();
oleCon.Close();

Console.ReadLine();

wndsc 2009-06-24
  • 打赏
  • 举报
回复
可是数据库里面就是日期格式,
我是帮人家整合的,我改了日期格式为字符串
数据库就麻烦啦,应为别人也用的这个 汗水-_-!哦
wndsc 2009-06-24
  • 打赏
  • 举报
回复
就是说提示 :标准表达式中数据类型不匹配。
原因就是 所有的日期参数,都要当字符来插入呗?
我试一下
zyug 2009-06-24
  • 打赏
  • 举报
回复
给一个ADO的示例你参考一下

this.insert = function()
{
var sql =" insert into [messages]([Title],[Content],[AddTime],[Click],[OrderIndex]) values(?,?,?,?,?)";
var connection = Server.CreateObject("adodb.connection");
connection.ConnectionString = MDBCONNECTIONSTRING;
connection.Open();
var command = Server.CreateObject("adodb.command");
command.ActiveConnection = connection;
command.CommandText =sql;
var par_Title = command.CreateParameter("Title",202,1,100,this.Title);
command.Parameters.Append(par_Title);
var par_Content = command.CreateParameter("Content",203,1,536870910,this.Content);
command.Parameters.Append(par_Content);
var par_AddTime = command.CreateParameter("AddTime",202,1,20,this.AddTime);
command.Parameters.Append(par_AddTime);
var par_Click = command.CreateParameter("Click",3,1,4,this.Click);
command.Parameters.Append(par_Click);
var par_OrderIndex = command.CreateParameter("OrderIndex",3,1,4,this.OrderIndex);
command.Parameters.Append(par_OrderIndex);
command.Execute();
connection.Close();
}



Set parameter = command.CreateParameter (Name, Type, Direction, Size, Value)

返回值

返回 Parameter 对象。

参数

Name 可选。String 值,包含 Parameter 对象的名称。

Type 可选。DataTypeEnum 值,指定 Parameter 对象的数据类型。

Direction 可选。ParameterDirectionEnum 值,指定 Parameter 对象的类型。

Size 可选。Long 值,指定参数值的最大长度(以字符或字节为单位)。

Value 可选。Variant,指定 Parameter 对象的值。




上面示例中的AddTime数据库中为时间类型,但是使用的时候 202 类型
adVarWChar 202 指示一个以 Null 终止的 Unicode 字符串(仅限于 Parameter 对象)。



zyug 2009-06-24
  • 打赏
  • 举报
回复
呵呵.Access里面的bug.

所有的日期参数,你都要当字符来插入

另外,你这个要使用 ?来代替参数
BernardSun 2009-06-24
  • 打赏
  • 举报
回复
VALUES 不要[]
wndsc 2009-06-24
  • 打赏
  • 举报
回复
SQL语句是这个 应该没有错的

INSERT INTO News ( Title, Content, CreateTime, Url, NewTypeId )
VALUES ([@Title], [@Content], [@CreateTime], [@Url], [@NewTypeId]);





public static int InsertNews(News n)
{

OleDbParameter[] odp = new OleDbParameter[]
{
new OleDbParameter("@Title",n.Title),
new OleDbParameter("@Content",n.Content),
new OleDbParameter("@CreateTime",n.CreateTime),//.ToString("yyyy-MM-dd HH:mm:ss")//OleDbType.DBTimeStamp
new OleDbParameter("@Url",n.Url),
new OleDbParameter("@NewTypeId",n.NewTypeId.NewTypeId)//这里是实体的映射
};
return DBHelper.ExecuteNonQuery(CommandType.StoredProcedure, "InsertIntoNews", odp);
}




还是提示 :标准表达式中数据类型不匹配。
winner2050 2009-06-23
  • 打赏
  • 举报
回复
如果还不行,就显式声明 @CreateTime 为OleDbType.DBTimeStamp
winner2050 2009-06-23
  • 打赏
  • 举报
回复
Access 数据库添加日期的数据,很死板的,硬插插不进去的。

n.CreateTime要写成n.CreateTime.ToString("yyyy-MM-dd HH:mm:ss");
摩人 2009-06-23
  • 打赏
  • 举报
回复
INSERT INTO [News] ( Title, Content, CreateTime, Url, NewTypeId ) VALUES(@Title,@Content,@CreateTime,@Url,@NewTypeId)

Nihn 2009-06-23
  • 打赏
  • 举报
回复
打断点调试,把str的值复制出来,放到数据库里执行一下,看看到底哪里有问题。
wzh307 2009-06-23
  • 打赏
  • 举报
回复

--参数
INSERT INTO News ( Title, Content, CreateTime, Url, NewTypeId ) VALUES(@Title,@Content,@CreateTime,@Url,@NewTypeId)

--值
INSERT INTO News ( Title, Content, CreateTime, Url, NewTypeId ) VALUES('@Title','@Content','@CreateTime','@Url','@NewTypeId')


2个是不一样的
gdjlc 2009-06-23
  • 打赏
  • 举报
回复
new OleDbParameter("@NewTypeId",n.NewTypeId.NewTypeId)


new OleDbParameter("@NewTypeId",n.NewTypeId)这里也写多一个了
cpp2017 2009-06-23
  • 打赏
  • 举报
回复
'@Title' 去掉'号先,否则就不是参数了.


62,240

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧