查询数据库时出错

时间:2012-03-03 17:22:43

标签: c# sql

我的代码:

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 System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Data;
using System.Data.SqlClient;
using WebMatrix.Data;

造成这种情况的原因是什么?

4 个答案:

答案 0 :(得分:3)

首先,您可能需要record.event_id而不是result.event_id。如果您将result更改为results,则代码会更清晰,因为它是结果的序列

然而,这只是将问题转移到一个阶段。 Database.Query会返回IEnumerable<object>,因此record的类型将为object ...而object没有名为{{1}的成员或者。

event_id的文档很模糊 - 虽然它可能会返回动态对象。试试这个:

Database.Query

编辑:如果foreach (dynamic record in result) { CalendarEvent cevent = new CalendarEvent(); cevent.id = record.event_id; } 即使工作而转换为record.event_id,那么有效结果类型可能是{{1}和MSDN没有太大的帮助。

但是,代码中仍然存在问题:将参数值直接包含在SQL中是个坏主意:

  • 在代码清洁度方面混合代码和数据是个坏主意
  • 您需要确保日期,数字等格式正确
  • 它打开了SQL注入攻击

相反,您应该使用参数化查询,如下所示:

dynamic

答案 1 :(得分:1)

不应该

cevent.id = result.event_id; //error is thrown here

cevent.id = record.event_id; 

如果有的话?

答案 2 :(得分:1)

cevent.id = result.event_id; //error is thrown here

应该是:

cevent.id = record.event_id;

答案 3 :(得分:1)

您可能需要

cevent.id = record.event_id;

相关问题