Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用OleDbDataReader检索值_C#_Sql_Oledbdatareader - Fatal编程技术网

C# 使用OleDbDataReader检索值

C# 使用OleDbDataReader检索值,c#,sql,oledbdatareader,C#,Sql,Oledbdatareader,让我们认为我的sql查询是 select customerDetials.custid,TestTable.col1 from CustomerDetails INNER JOIN TestTable on CustomerDetails.custid=TestTables.custid where CustomerDetails.custid>0 我想使用OleDbDataReader来检索这些行 我用这种方式 while (dataReader.Read()) {

让我们认为我的sql查询是

  select customerDetials.custid,TestTable.col1 from CustomerDetails INNER JOIN TestTable  on CustomerDetails.custid=TestTables.custid where CustomerDetails.custid>0
我想使用OleDbDataReader来检索这些行

我用这种方式

while (dataReader.Read())
{
       string str= dataReader["customerDetials.custid"].ToString();
}

但是问题就在这里,join在那里,所以如果我给上面这样的列名,它会给我一个异常,我不能使用索引,或者我不能更改sql查询。那么有什么方法可以使用列名检索数据吗?

您尝试过使用

while (dataReader.Read()) { 
    string str= dataReader["custid"].ToString();    
}

你有没有试过用它

while (dataReader.Read()) { 
    string str= dataReader["custid"].ToString();    
}

我想你想要的是

string str = dataReader.GetInt32(0).ToString();

其中(0)表示查询中列的从零开始的顺序位置

我想您想要的是

string str = dataReader.GetInt32(0).ToString();

其中(0)表示查询中列的从零开始的顺序位置

如果您不知道查询将返回什么,则必须:

获取FieldCount(结果集中的列数),然后在检索数据的DataReader的每一行中循环字段(列)

您将需要以下一种或多种方法:

  • GetFieldType(int)-返回列的类型
  • GetDataTypeName(int)-返回后端数据库的名称 列类型
  • GetName(int)-返回列名

如果您不知道查询将返回什么,您必须:

获取FieldCount(结果集中的列数),然后在检索数据的DataReader的每一行中循环字段(列)

您将需要以下一种或多种方法:

  • GetFieldType(int)-返回列的类型
  • GetDataTypeName(int)-返回后端数据库的名称 列类型
  • GetName(int)-返回列名

是的..尝试..但是引发异常并且它不正确,因为联接表也可能有同名的列..因此它无效。选择是正确的。就这样吧。返回的结果应该有2列,custid和col1.在这种情况下,我没有TestTable.custid在查询中…认为我们有它..因为我的查询是动态的,我不知道它是如何来的..所以我应该写尽可能一般的.是的..尝试过..但是抛出一个异常并且它不合适,因为联接表可能也有一个同名的col..所以它是无效的.选择是正确的。就这样吧。返回的结果应该有2列,custid和col1.在这种情况下,我没有TestTable.custid在查询中…我想我们有它..因为我的查询是动态的,我不知道它是怎么来的..所以我应该写得尽可能一般。我不能使用基于索引的,因为我不知道查询将如何准备,所以我不知道列的顺序。我不能使用基于索引的,因为我不知道查询将如何准备所以我不知道列的顺序。