【问题标题】:What data type does C# return in a SQL CE query (using WebMatrix)?C# 在 SQL CE 查询中返回什么数据类型(使用 WebMatrix)?
【发布时间】:2013-05-28 15:51:13
【问题描述】:

我花了一些时间在谷歌上搜索并在这里研究了一些时间:http://msdn.microsoft.com/

但是,我似乎找不到这个问题的简单答案:

当我从数据库返回一些数据时,如下所示的行将返回什么 C# 数据类型到以下 row 变量:

selectQueryString = "SELECT * FROM ContentObjects INNER JOIN TitleObjects ON ContentObjects.ObjectID = TitleObjects.ObjectID WHERE location='home' AND type = 'title' AND TitleObjects.ObjectID = @0";

row = db.QuerySingle(subSelectQueryString, someNumber);

我问是因为我需要在页面开头声明row,然后才能使用它,但它必须被初始化,我似乎无法在不知道数据类型的情况下这样做。

更新:

顺便说一句,var db = Database.Open("tableName")

【问题讨论】:

  • 您的链接:msdn.microsoft.com 对您的研究来说似乎过于笼统?您可以尝试更具体的链接。
  • @David 老实说,我真的不知道去哪里找。
  • msdn.microsoft.com/en-us/library/… 会对你更好吗?
  • @David 好的,是的,我见过很多这样的页面,但是我怎么知道数据类型是什么?
  • @根据 MSDN,这应该返回一个“对象”,然后我推测这取决于您的应用程序,否则如果它可以是通用的,它将不会返回一个对象,因为 . net 是强类型的,并且会尽量保持泛型属性。

标签: c# sql types sql-server-ce webmatrix


【解决方案1】:

QuerySingle 方法返回dynamic 类型(请参阅http://msdn.microsoft.com/en-us/library/dd264736.aspx)。架构中的字段名称成为动态对象的属性。编译器(或者在 dynamic 的情况下,运行时绑定器)只会认为您正在尝试调用一个方法,如果您在属性后面加上括号,例如

@row.linktext()

【讨论】:

  • 真的吗?我没有使用方括号,但它似乎认为我无论如何都试图调用一个方法(至少,这就是错误所说的,但我们都知道错误有时是多么不准确)。我不得不在某个循环中使用var(我害怕这样做),但它似乎并没有因此而出错,所以我想我没事。
【解决方案2】:

除非您明确定义行对象,否则它将基于 SQL Server 类型的列。您必须知道 SQL Server 中 ContectObjects 表的定义。

【讨论】:

    【解决方案3】:

    它返回一个dynamic 数据类型

    dynamic 是 C# 4.0 中的新数据类型。它只是一种在运行时处理的数据类型。编译后动态计算出对象的数据类型,例如

    selectQueryString = "SELECT * FROM ContentObjects INNER JOIN TitleObjects ON ContentObjects.ObjectID = TitleObjects.ObjectID WHERE location='home' AND type = 'title' AND TitleObjects.ObjectID = @0";
    
    row = db.QuerySingle(subSelectQueryString, someNumber);
    
    var the_field_content = row.location;
    

    如果您的查询方法是 db.Query ,它将返回一个 IEnumerable<object> ,这为您提供了使用 LINQ 方法或对象方法进行深入挖掘的额外优势,例如 row.Length;row.Skip(5).Take(2).Select(row);

    尝试将变量 row 声明为 var,在 Visual Studio 中对其设置断点并将鼠标悬停在其上。数据类型将显示出来。它是dynamic

    【讨论】:

    • 这是不正确的。 QuerySingle 方法不返回 Enumerable。
    • Query 返回一个 IEnumerable 而不是 QuerySingle。对此感到抱歉。
    猜你喜欢
    • 1970-01-01
    • 2010-12-08
    • 1970-01-01
    • 2011-05-30
    • 2019-09-06
    • 1970-01-01
    • 1970-01-01
    • 2018-12-04
    • 1970-01-01
    相关资源
    最近更新 更多