Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/321.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#中?_C#_Sql_Vb.net_Visual Studio 2013_Sqlclient - Fatal编程技术网

如何从列表中获取布尔值<;对象>;在c#中?

如何从列表中获取布尔值<;对象>;在c#中?,c#,sql,vb.net,visual-studio-2013,sqlclient,C#,Sql,Vb.net,Visual Studio 2013,Sqlclient,嗨,我正在将一个vb项目从mkaatr的youtube教程转换成c# 他使用一个变量 Private DBMSResultSets As List(Of Object) 所以我在c#私有列表dbmsresultset中使用了一个变量 在后面的代码中,他使用了一个返回类型为bool的函数,并使用了一个方法 return DBMSResultSets(I).Read 因此,我使用了相同的东西,但visual studio给了我错误,所以将鼠标悬停在vb代码(DBMSResultSets(i).

嗨,我正在将一个vb项目从mkaatr的youtube教程转换成c# 他使用一个变量

 Private DBMSResultSets As List(Of Object)
所以我在c#
私有列表dbmsresultset中使用了一个变量

在后面的代码中,他使用了一个返回类型为bool的函数,并使用了一个方法

return DBMSResultSets(I).Read
因此,我使用了相同的东西,但visual studio给了我错误,所以将鼠标悬停在vb代码
(DBMSResultSets(i).Read)
上,它会说“获取或设置指定索引处的元素”

所以我环顾四周,发现如果我写return
DBMSResultSets[(int)i])它执行相同的操作,即(“获取或设置指定索引处的元素”)

现在VisualStudio给了我一个无法将对象转换为bool的错误,所以我使用convert.to并尝试(bool)方法try to typecast,但这两种方法都不起作用 所以我需要帮助 我给你全部的vb代码,还有我的转换c#代码

问题出在函数ReadAndNotEOF中

vb代码

我的c代码

//此类将用于管理与数据库的连接
使用制度;
使用System.Collections.Generic;
使用System.Linq;
使用系统文本;
使用System.Threading.Tasks;
使用System.Data.Sql;
使用系统数据;
使用System.Data.SqlClient;
名称空间库
{
公共类DBMSClass
{
//定义连接字符串
//私有字符串DBMSConnectionString=“数据源=(LocalDB)\\v11.0;AttachDbFilename=“\\D:\\tutorial\\c\35tutorial\\2015年5月3日\\Library\u main\\Library\u main\\bin\\Debug\\DataBase\\LMS.mdf”;“集成安全性=True;连接超时=30”;
//定义连接
私有SqlConnection DBMSConnectionObj=null;
//定义事务
私有SqlTransaction DBMSTransactionObj;
//定义命令对象和结果集
私有列表DBMSCommands;
私有列表DBMSCommandCodes;
私有列表dbmsresultset;
//命令计数器
专用长DBMSCommandCounter;
//开放数据库连接
公共字符串OpenDB()
{
尝试
{
//打开连接
DBMSConnectionObj=newsqlconnection(Properties.Settings.Default.ConnectionString);
DBMSConnectionObj.Open();
//创建事务
DBMSTransactionObj=DBMSConnectionObj.BeginTransaction();
//准备命令列表
DBMSCommands=新列表();
DBMSCommandCodes=新列表();
DBMSResultSets=新列表();
//准备命令计数器
DBMSCommandCounter=0;
//返回ok
返回“ok”;
}
捕获(例外情况除外)
{
返回ex.消息;
}
}
//这用于运行sql命令
public void ExceuteSQL(字符串SQL,参数对象[]Obj)
{
//构建命令对象
SqlCommand CMD=新的SqlCommand(SQL,this.DBMSConnectionObj,this.DBMSTransactionObj);
//将参数添加到sql命令中
int I;
整数计数=对象长度-1;

对于(I=0;I在SqlCommand对象上调用executeReader的结果是
SqlDataReader

在代码的这一部分中

// read the data
dynamic RS = CMD.ExecuteReader(System.Data.CommandBehavior.Default);

// store objects in list
this.DBMSCommandCodes.Add(DBMSCommandCounter);
this.DBMSCommands.Add(CMD);
this.DBMSResultSets.Add(RS);
RS的类型与accrostic建议的
ResultSet
完全不同,但它是一个
SqlDataReader
,它有一个布尔方法调用
Read
,它将返回true,直到没有更多的数据可从其流中获取

因此,在您的布尔方法中称为
ReadAndNotEof
,而不是

return Convert.ToBoolean(DBMSResultSets[(int)I]);

在相同的模式下,如果您的更改是:

return DBMSResultSets[(int)I].Equals(ColumnName);

有关获取字符串参数(列名)的访问器
的定义,请参见

当然,您需要确保SqlDataReader的Read方法返回true(您上面的方法)


希望这对您有所帮助。

您应该正确键入列表,您不是在插入对象,而是在插入IDataReader。
if(DBMSCommandCodes[(int)I]==code)
是一个字符串。如果是这样,请执行以下操作
if(Convert.ToInt32(DBMSCommandCodes[I])==code)
这里有很多代码可能与问题无关。您是否尝试过创建一个?“但两种方法都不起作用”-您如何知道它不起作用?您是否遇到异常?是的,当我使用这两种方法时,我都遇到了异常@C.Evenhuisit给我一个错误”已经有一个打开的DataReader与此命令关联,必须先关闭它。“你可以在这里看到我的项目@tjnapster555我得到了它并将对它进行分析:如果你想查看它,请尽快回来共享整个代码,在函数ReadAndNotEof中说,它的行SqlDataReader=(SqlDataReader)DBMSResultSets[(int)I];return reader.Read();我得到了堆栈跟踪,您可以看到它[link]在这里,我希望它可能会有所帮助。请告诉我问题是什么,它是唯一的一个类是制造问题,之后所有其他8类都依赖它。我真的很想完成这个项目,它将帮助我学习c#@tjnapster555,我很高兴,并且不介意我们都发现自己在编程方面处于类似的情况。我很高兴我能贡献自己的一份力量一点点。祝你一切顺利
return Convert.ToBoolean(DBMSResultSets[(int)I]);
SqlDataReader reader = (SqlDataReader)DBMSResultSets[(int)I];
return reader.Read();
return DBMSResultSets[(int)I].Equals(ColumnName);
SqlDataReader reader = (SqlDataReader)DBMSResultSets[(int)I];

object columnValue = reader[columnName];
return columnValue;