向上抛出SQLDataReader错误

时间:2016-12-07 21:29:33

标签: c# sql sql-server error-handling sqlclient

我有一个基本类,用于使用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)); }
        }
    }

0 个答案:

没有答案