我只是學習使用ADO.NET,我似乎有一個問題。我想要做的是從表中獲取數據並將其插入到DataTable.Here是我的代碼:關閉datareader NullReferenceException
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。
我在做什麼錯?
EDIT
我只注意到讀者= cmd.ExecuteReader();拋出一個InvalidOperationException.Is這是因爲查詢?
你的代碼是否到達線路閱讀器= cmd.ExecuteReader();?看起來好像連接或讀取器從來沒有實例化,由於例外。 – Alex 2013-02-25 15:00:10
嘗試使用調試器通過代碼步驟。注意While循環中的第一行,您可能在cmd處得到錯誤。執行這些2行需要更改'categories.Columns.Add(「Id」,typeof (INT)); categories.Columns.Add(「CategoryName」,typeof(int));'你想把它們改爲'cmd.Parameters.AddWithValue(@ CatagoryName,categoryName);' 'cmd.Parameters.AddWithValue(@ Id,categoryId );' – MethodMan 2013-02-25 15:00:47