我有一个基本类,用于使用SqlDataReader填充一些属性。此外,还有一个用于执行类型转换(SConvert)和填充对象的类。 SqlDataReader检索数据但是,在类型转换中的某处存在问题,可能是通过错误的名称请求字段。我遇到的问题是错误在“FindAll”中被抓住了。方法并没有有意义的信息。我想从SConvert类中获得有意义的错误(例如,超过'对象引用没有设置为对象的实例。')并被告知哪个字段正在被要求不正确。
任何让我想起这个想法的想法都会非常感激。
我在代码中添加了三条评论' //< --...'表示错误被捕获的位置,拼写错误以及应该抛到什么位置。
public class People
{
public string FirstName { get; set; }
public string LastName { get; set; }
public int Age { get; set; }
public static List<People> FindAll()
{
List<People> pl = new List<DataService.People>();
try
{
using (SqlConnection sqlConnection = new SqlConnection("MyConnectionString"))
{
sqlConnection.Open();
using (SqlCommand sqlCommand = new SqlCommand("MyStoredProc", sqlConnection))
{
sqlCommand.CommandType = System.Data.CommandType.StoredProcedure;
SqlDataReader sqlDataReader = sqlCommand.ExecuteReader();
while (sqlDataReader.Read())
{
People p = readData(sqlDataReader);
pl.Add(p);
}
}
}
}
catch (Exception ex) { throw new System.ArgumentException(ex.Message); } // <--EXCEPTION GETS CAUGHT HERE ***
return pl;
}
private static People readData(SqlDataReader sqlDataReader)
{
People p = null;
SConvert sc = new DataService.SConvert(sqlDataReader);
p = new DataService.People()
{
FirstName = sc.SToString("FirstNme"), // <--SPELLING ERROR HERE
LastName = sc.SToString("LastName"),
Age = sc.SToInt("Age")
};
return p;
}
}
转化:
public class SConvert
{
private SqlDataReader sqlr;
public SConvert(SqlDataReader sqlDataReader) { sqlr = sqlDataReader; }
public string SToString(string FieldName)
{
try { return sqlr[FieldName].ToString(); }
catch { throw new System.ArgumentException(string.Format("Error in SConvert when converting string value for field: {0}", FieldName)); } // <--I WANT THIS EXCEPTION THROWN UP TO THE TOP (SEE ***)
}
public int SToInt(string FieldName)
{
try { return (string.IsNullOrEmpty(sqlr[FieldName].ToString())) ? 0 : Convert.ToInt32(sqlr[FieldName].ToString()); }
catch { throw new System.ArgumentException(string.Format("Error in SConvert when converting int value for field: {0}", FieldName)); }
}
}