gpt4 book ai didi

c# - ExecuteReader() 使程序退出类

转载 作者:太空宇宙 更新时间:2023-11-03 22:05:10 25 4
gpt4 key购买 nike

我在从 sqlServer 中的表填充 Windows 窗体上的列表框时遇到了一些麻烦。该表是一列字符串值,因为我很不喜欢在我的应用程序中多次调用这个值列表,所以我将它设置为一个类,并在默认构造函数中用 SQL 中的值填充一个 ArrayList表,如下:

class cCaseType
{
public ArrayList aValues = new ArrayList();

public cCaseType()
{
string strConnection = BuildConnectionString();
SqlConnection linkToDB = new SqlConnection(strConnection);
string sqlText = "SELECT * FROM tblCaseTypes;";
SqlCommand sqlComm = new SqlCommand(sqlText, linkToDB);
SqlDataReader sqlReader = sqlComm.ExecuteReader();
MessageBox.Show("Hi");
while (sqlReader.Read())
{
aValues.Add(sqlReader["CaseType"].ToString());
}
sqlReader.Close();
linkToDB.Close();
}

public string BuildConnectionString()
{
cConnectionString cCS = new cConnectionString();
return cCS.strConnect;
}
}

现在我知道数据库连接正在工作,因为在整个应用程序中使用相同的连接。我知道 SQL 命令文本是正确的,因为当我在 SQL Management Studio 中执行它时,它会按预期返回表中的所有值。但是,程序只是在 ExecuteReader() 处退出,因此永远不会填充 ArrayList。

我确实想知道程序是否正在退出,因为“while”循环由于读取器的空结果而被跳过,但它甚至没有到达“while”语句。我通过放入 MessageBox 并在其上设置断点来证明这一点。该程序从不打开消息框,证明它正在退出 ExecuteReader 语句中的类。

我到底做错了什么!

一如既往,感谢您的帮助。

最佳答案

如果您捕获了异常,错误文本将是“在关闭的 sql 连接上执行读取器时出错”,因此您应该在尝试从中读取数据之前打开连接:

    SqlConnection linkToDB = new SqlConnection(strConnection);
linkToDB.Open(); // <-------
string sqlText = "SELECT * FROM tblCaseTypes;";
SqlCommand sqlComm = new SqlCommand(sqlText, linkToDB);
SqlDataReader sqlReader = sqlComm.ExecuteReader();

关于c# - ExecuteReader() 使程序退出类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8699277/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com