查询数据库时出错
本文关键字:出错 数据库 查询 | 更新日期: 2023-09-27 18:26:28
我的代码:
var db = Database.Open("dbase");
var result = db.Query("SELECT event_id, description, title, event_start, event_end
FROM event
WHERE event_start >= "+ start + " AND event_end <= "+ @end);
foreach(var record in result)
{
CalendarEvent cevent = new CalendarEvent();
cevent.id = result.event_id; //error is thrown here
}
错误消息:
CS1061:"System.Collections.Generic.IEnumerable"不包含"event_id"的定义,没有扩展方法"event_id"接受类型的第一个参数找不到"System.Collections.Generic.IEnumerable"(分别为缺少using指令或程序集引用?)
在我的代码中,我有:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Data;
using System.Data.SqlClient;
using WebMatrix.Data;
是什么原因造成的?
首先,您可能指的是record.event_id
而不是result.event_id
。如果将result
更改为results
,您的代码会更清晰,因为它是结果的序列。
然而,这只是将问题转移到一个阶段。Database.Query
返回一个IEnumerable<object>
,所以record
的类型将是object
。。。并且CCD_ 9也不具有被称为CCD_。
Database.Query
的文档非常模糊——不过它可能返回了动态对象。试试这个:
foreach (dynamic record in result)
{
CalendarEvent cevent = new CalendarEvent();
cevent.id = record.event_id;
}
编辑:如果record.event_id
即使在也能工作,而没有转换为dynamic
,那么有效的结果类型可能是IEnumerable<dynamic>
,MSDN也没有太大帮助。
然而,您的代码中仍然存在一个问题:将参数值直接包含在SQL中是个坏主意,比如:
- 就代码清洁度而言,混合代码和数据是个坏主意
- 你需要确保日期、数字等格式正确
- 它使您容易受到SQL注入攻击
相反,您应该使用参数化查询,如下所示:
var result = db.Query(
"SELECT event_id, description, title, event_start, event_end FROM event " +
"where event_start >= ? AND event_end <= ?",
start, end);
不应该
cevent.id = result.event_id; //error is thrown here
是
cevent.id = record.event_id;
如果有的话?
cevent.id = result.event_id; //error is thrown here
应该是:
cevent.id = record.event_id;
您可能需要
cevent.id = record.event_id;