Last active
August 29, 2015 14:04
-
-
Save mahmut-gundogdu/4fd2172671977d06f17d to your computer and use it in GitHub Desktop.
SqlDataReader ve null gelen veri sorununa prait çözümler. Çözüm 1: SqlDataReader için generic extension olusturulur. Çözüm 2: de bir static fonksiyon olusturulur. Bu fonksiyon null ile default değeri gönderir yoksa convert ederek verir.Convert.ToInt32() yerine düşünün. Çözüm 3: c# ?? operatörü.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
//Kaynak: http://stackoverflow.com/questions/18550769/sqldatareader-best-way-to-check-for-null-values-sqldatareader-isdbnull-vs-dbnul | |
using System; | |
using System.ComponentModel; | |
using System.Data.SqlClient; | |
public static class SqlReaderHelper | |
{ | |
private static bool IsNullableType(Type theValueType) | |
{ | |
return (theValueType.IsGenericType && theValueType.GetGenericTypeDefinition().Equals(typeof(Nullable<>))); | |
} | |
/// <summary> | |
/// Returns the value, of type T, from the SqlDataReader, accounting for both generic and non-generic types. | |
/// </summary> | |
/// <typeparam name="T">T, type applied</typeparam> | |
/// <param name="theReader">The SqlDataReader object that queried the database</param> | |
/// <param name="theColumnName">The column of data to retrieve a value from</param> | |
/// <returns>T, type applied; default value of type if database value is null</returns> | |
public static T GetValue<T>(this SqlDataReader theReader, string theColumnName) | |
{ | |
// Read the value out of the reader by string (column name); returns object | |
object theValue = theReader[theColumnName]; | |
// Cast to the generic type applied to this method (i.e. int?) | |
Type theValueType = typeof(T); | |
// Check for null value from the database | |
if (DBNull.Value != theValue) | |
{ | |
// We have a null, do we have a nullable type for T? | |
if (!IsNullableType(theValueType)) | |
{ | |
// No, this is not a nullable type so just change the value's type from object to T | |
return (T)Convert.ChangeType(theValue, theValueType); | |
} | |
else | |
{ | |
// Yes, this is a nullable type so change the value's type from object to the underlying type of T | |
NullableConverter theNullableConverter = new NullableConverter(theValueType); | |
return (T)Convert.ChangeType(theValue, theNullableConverter.UnderlyingType); | |
} | |
} | |
// The value was null in the database, so return the default value for T; this will vary based on what T is (i.e. int has a default of 0) | |
return default(T); | |
} | |
} | |
//yourSqlReaderObject.GetValue<int?>("SOME_ID_COLUMN"); | |
//yourSqlReaderObject.GetValue<string>("SOME_VALUE_COLUMN"); | |
//Diyerek de kullanabiliriz. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
//Kaynak: http://stackoverflow.com/questions/17509144/how-to-get-null-values-in-sqldatareader | |
private static T GetValue<T>(object value) | |
{ | |
return value == DBNull.Value | |
? default(T) | |
: (T) Convert.ChangeType(value, typeof(T)); | |
} | |
// s.id = GetValue<long>(reader["so_id"]); | |
// s.senderid = GetValue<long>(reader["so_senderid"]); | |
// Diyerek de bunu kullanabilrisiniz. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
//Kaynak: http://msdn.microsoft.com/en-us/library/ms173224.aspx | |
int? x = null; | |
// Set y to the value of x if x is NOT null; otherwise, | |
// if x = null, set y to -1. | |
int y = x ?? -1; |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment