gpt4 book ai didi

c# - 关闭数据读取器时出现 NullReferenceException

转载 作者:行者123 更新时间:2023-11-30 19:28:34 25 4
gpt4 key购买 nike

我刚刚开始学习使用 ADO.NET,我似乎遇到了一个问题。我想做的是从表中获取数据并将其插入到 DataTable 中。这是我的代码:

public DataTable GetCategories()
{
SqlConnection connection = null;
SqlDataReader reader = null;
DataTable categories = new DataTable();

try {
connection = new SqlConnection();
connection.ConnectionString = connectionString;
connection.Open();

SqlCommand cmd = new SqlCommand();
cmd.CommandType = CommandType.StoredProcedure;
cmd.CommandText = "GetCategories";
reader = cmd.ExecuteReader();

categories.Columns.Add("Id", typeof(int));
categories.Columns.Add("CategoryName", typeof(int));

while (reader.Read()) {
int categoryId = (int)reader["Id"];
string categoryName = (string)reader["CategoryName"];
categories.Rows.Add(categoryId , categoryName);
}

}catch(Exception e){
DataTable error = new DataTable();
error.Columns.Add("Error");
error.Rows.Add(e.Message);
return error;
}finally{
connection.Close();
reader.Close();
}
return categories;
}

这是我的 SQL 查询:

 CREATE PROCEDURE [dbo].[GetCategories]
AS
SELECT Id , CategoryName
FROM Categories

在我运行此方法的地方,我在 reader.Close() 上返回了一个显示 NullRefferenceException 的异常。

我做错了什么?

编辑

我刚刚注意到 reader = cmd.ExecuteReader();抛出 InvalidOperationException。这是因为查询吗?

最佳答案

您编写代码的方式意味着如果创建或连接到 SqlConnection 时出错,您的 finally block 将尝试关闭尚未关闭的 reader尚未设置。

检查 finally block 中的空值或重新构建代码。

关于c# - 关闭数据读取器时出现 NullReferenceException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15069847/

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