2013-08-10 2 views
2

Я пытаюсь связать элемент управления GridView со следующим кодом. Но я получаю сообщение об ошибке «Data is Null. Этот метод или свойство не могут быть вызваны значениями Null». Строка ошибки - «p.MaterialName = reader.GetString (reader.GetOrdinal (« MaterialName »)); У меня есть данные во всех полях в таблице «Материалы». Что не так с кодом? Пожалуйста, помогите мне исправить это.Не удалось привязать Gridview

public static List<Product> GetMaterials() 
{ 
    SqlHelper objSqlHelper = new SqlHelper(); 
    SqlDataReader reader = objSqlHelper.ExecuteReader("GetMaterials"); 
    List<Product> objMaterials = new List<Product>(); 
    Product p = new Product(); 
    while (reader.Read()) 
    { 
     p.MaterialId = reader.GetInt32(reader.GetOrdinal("MaterialId")); 
     p.MaterialName = reader.GetString(reader.GetOrdinal("MaterialName")); 
     p.desc = reader.GetString(reader.GetOrdinal("desc")); 
     p.MaterialPrice = reader.GetDecimal(reader.GetOrdinal("MaterialPrice")); 
     p.Datasheet = reader.GetString(reader.GetOrdinal("Datasheet")); 
     objMaterials.Add(p); 
    } 
    reader.Close(); 
    return objMaterials; 
} 

ответ

0

Я знаю, что вы сказали, что должны быть данные, но это типично, когда данные отсутствуют.

Попробуйте проверить, если «MaterialName» является недействительным в базе данных:

p.MaterialName = reader.IsDBNull("MaterialName") 
        ? null : reader.GetString(reader.GetOrdinal("MaterialName")) 

Если это работает, но тогда вы получите ошибку на другой линии, вы, возможно, придется проверить нулям на этих линиях тоже.


Для поля «MaterialPrice», использовать что-то вроде этого: (если p.MaterialPrice не обнуляемым, замените (decimal)null с некоторым значением по умолчанию, как 0)

p.MaterialPrice 
    = reader.IsDBNull("MaterialPrice") 
     ? (decimal)null : reader.GetDecimal(reader.GetOrdinal("MaterialPrice")) 
+0

Это работает, то я изменил для другой, но для MaterialPrice, я получаю ошибку компиляции "p.MaterialPrice = reader.IsDBNull (reader.GetOrdinal (" MaterialPrice "))? null: reader.GetDecimal (reader.GetOrdinal (" MaterialPrice ")); – ayha

+0

error Ошибка Тип условного выражения не может быть определен, потому что нет никакого неявного преобразования между '' и 'decimal' – ayha

+0

Если 'p.MaterialPrice' - поле с нулевым значением, вы можете использовать« (десятичное) значение null ». Если 'p.MaterialPrice' не имеет значения NULL, вам нужно решить, какое значение по умолчанию должно быть, например' 0'. Я отредактирую свой ответ. –

Смежные вопросы