我有一个问题,从我的呼叫表中读取呼叫。 其中一列是DateTime列,如果调用未关闭,则允许此列为空。 当我执行C#代码以从Calls表中获取所有调用时,出现数据为空的错误,而在没有数据存在时无法读取。 我想如果我有一个If语句检查该列是否为null,那将解决问题......但这不起作用。
以下是我遇到问题的代码:
public void GetAllCalls(Connection connectionObject) { try { if (memoryObject.GetCallCount() != 0) { memoryObject.DeleteAllCalls(); } SqlCommand getCalls = new SqlCommand("sp_getAllCalls", connectionObject.getDatabaseConnection()); getCalls.CommandType = CommandType.StoredProcedure; dataReader = getCalls.ExecuteReader(); if (dataReader.HasRows) { while (dataReader.Read()) { if (dataReader.GetDateTime(8).Equals(DBNull.Value)) { Call newCall = new Call(dataReader.GetString(0), dataReader.GetString(1), dataReader.GetString(2), dataReader.GetString(3), dataReader.GetString(4), dataReader.GetString(5), dataReader.GetString(6), dataReader.GetDateTime(7), Convert.ToDateTime(null), dataReader.GetString(9), dataReader.GetString(10), dataReader.GetString(11), dataReader.GetString(12)); memoryObject.AddCall(newCall); } else { Call newCall = new Call(dataReader.GetString(0), dataReader.GetString(1), dataReader.GetString(2), dataReader.GetString(3), dataReader.GetString(4), dataReader.GetString(5), dataReader.GetString(6), dataReader.GetDateTime(7), dataReader.GetDateTime(8), dataReader.GetString(9), dataReader.GetString(10), dataReader.GetString(11), dataReader.GetString(12)); memoryObject.AddCall(newCall); } } dataReader.Close(); } else { dataReader.Close(); functionsObject.displayMessage("No Calls Found", "No calls were found on the system"); } } catch (Exception error) { logNewError(error, "GetAllCalls", connectionObject); } }I am having an issue reading Calls from my Call Table. One of my columns is a DateTime column, and this column I have allowed to be null, if the call has not been closed. When I execute my C# code that is to fetch all calls from the Calls table, I get an error that the data is null, cannot read when no data is present. I thought If I had an If statement that checks if that column is null, that would solve the issue... but that doesn't work.
Here is the code where I am experiencing the problem:
public void GetAllCalls(Connection connectionObject) { try { if (memoryObject.GetCallCount() != 0) { memoryObject.DeleteAllCalls(); } SqlCommand getCalls = new SqlCommand("sp_getAllCalls", connectionObject.getDatabaseConnection()); getCalls.CommandType = CommandType.StoredProcedure; dataReader = getCalls.ExecuteReader(); if (dataReader.HasRows) { while (dataReader.Read()) { if (dataReader.GetDateTime(8).Equals(DBNull.Value)) { Call newCall = new Call(dataReader.GetString(0), dataReader.GetString(1), dataReader.GetString(2), dataReader.GetString(3), dataReader.GetString(4), dataReader.GetString(5), dataReader.GetString(6), dataReader.GetDateTime(7), Convert.ToDateTime(null), dataReader.GetString(9), dataReader.GetString(10), dataReader.GetString(11), dataReader.GetString(12)); memoryObject.AddCall(newCall); } else { Call newCall = new Call(dataReader.GetString(0), dataReader.GetString(1), dataReader.GetString(2), dataReader.GetString(3), dataReader.GetString(4), dataReader.GetString(5), dataReader.GetString(6), dataReader.GetDateTime(7), dataReader.GetDateTime(8), dataReader.GetString(9), dataReader.GetString(10), dataReader.GetString(11), dataReader.GetString(12)); memoryObject.AddCall(newCall); } } dataReader.Close(); } else { dataReader.Close(); functionsObject.displayMessage("No Calls Found", "No calls were found on the system"); } } catch (Exception error) { logNewError(error, "GetAllCalls", connectionObject); } }最满意答案
检查的正确方法是使用SqlDataReader.IsDBNull方法
if (dataReader.IsDBNull(8))The correct way of checking that is using the SqlDataReader.IsDBNull method
if (dataReader.IsDBNull(8))从SqlServer中的表读取Null DateTime列(Reading Null DateTime column from a Table in SqlServer)我有一个问题,从我的呼叫表中读取呼叫。 其中一列是DateTime列,如果调用未关闭,则允许此列为空。 当我执行C#代码以从Calls表中获取所有调用时,出现数据为空的错误,而在没有数据存在时无法读取。 我想如果我有一个If语句检查该列是否为null,那将解决问题......但这不起作用。
以下是我遇到问题的代码:
public void GetAllCalls(Connection connectionObject) { try { if (memoryObject.GetCallCount() != 0) { memoryObject.DeleteAllCalls(); } SqlCommand getCalls = new SqlCommand("sp_getAllCalls", connectionObject.getDatabaseConnection()); getCalls.CommandType = CommandType.StoredProcedure; dataReader = getCalls.ExecuteReader(); if (dataReader.HasRows) { while (dataReader.Read()) { if (dataReader.GetDateTime(8).Equals(DBNull.Value)) { Call newCall = new Call(dataReader.GetString(0), dataReader.GetString(1), dataReader.GetString(2), dataReader.GetString(3), dataReader.GetString(4), dataReader.GetString(5), dataReader.GetString(6), dataReader.GetDateTime(7), Convert.ToDateTime(null), dataReader.GetString(9), dataReader.GetString(10), dataReader.GetString(11), dataReader.GetString(12)); memoryObject.AddCall(newCall); } else { Call newCall = new Call(dataReader.GetString(0), dataReader.GetString(1), dataReader.GetString(2), dataReader.GetString(3), dataReader.GetString(4), dataReader.GetString(5), dataReader.GetString(6), dataReader.GetDateTime(7), dataReader.GetDateTime(8), dataReader.GetString(9), dataReader.GetString(10), dataReader.GetString(11), dataReader.GetString(12)); memoryObject.AddCall(newCall); } } dataReader.Close(); } else { dataReader.Close(); functionsObject.displayMessage("No Calls Found", "No calls were found on the system"); } } catch (Exception error) { logNewError(error, "GetAllCalls", connectionObject); } }I am having an issue reading Calls from my Call Table. One of my columns is a DateTime column, and this column I have allowed to be null, if the call has not been closed. When I execute my C# code that is to fetch all calls from the Calls table, I get an error that the data is null, cannot read when no data is present. I thought If I had an If statement that checks if that column is null, that would solve the issue... but that doesn't work.
Here is the code where I am experiencing the problem:
public void GetAllCalls(Connection connectionObject) { try { if (memoryObject.GetCallCount() != 0) { memoryObject.DeleteAllCalls(); } SqlCommand getCalls = new SqlCommand("sp_getAllCalls", connectionObject.getDatabaseConnection()); getCalls.CommandType = CommandType.StoredProcedure; dataReader = getCalls.ExecuteReader(); if (dataReader.HasRows) { while (dataReader.Read()) { if (dataReader.GetDateTime(8).Equals(DBNull.Value)) { Call newCall = new Call(dataReader.GetString(0), dataReader.GetString(1), dataReader.GetString(2), dataReader.GetString(3), dataReader.GetString(4), dataReader.GetString(5), dataReader.GetString(6), dataReader.GetDateTime(7), Convert.ToDateTime(null), dataReader.GetString(9), dataReader.GetString(10), dataReader.GetString(11), dataReader.GetString(12)); memoryObject.AddCall(newCall); } else { Call newCall = new Call(dataReader.GetString(0), dataReader.GetString(1), dataReader.GetString(2), dataReader.GetString(3), dataReader.GetString(4), dataReader.GetString(5), dataReader.GetString(6), dataReader.GetDateTime(7), dataReader.GetDateTime(8), dataReader.GetString(9), dataReader.GetString(10), dataReader.GetString(11), dataReader.GetString(12)); memoryObject.AddCall(newCall); } } dataReader.Close(); } else { dataReader.Close(); functionsObject.displayMessage("No Calls Found", "No calls were found on the system"); } } catch (Exception error) { logNewError(error, "GetAllCalls", connectionObject); } }最满意答案
检查的正确方法是使用SqlDataReader.IsDBNull方法
if (dataReader.IsDBNull(8))The correct way of checking that is using the SqlDataReader.IsDBNull method
if (dataReader.IsDBNull(8))
发布评论