私はちょうど 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
このメソッドを実行すると、NullRefferenceException という例外が Reader.Close() に戻ります。
私は何を間違っていますか?
編集
reader = cmd.ExecuteReader(); に気付きました。InvalidOperationException をスローします。これはクエリが原因ですか?