ExecuteReader: Connection 属性尚未初始化。错误解决
读取student表中的数据打印到屏幕,代码
1 class Program 2 { 3 static void Main(string[] args) 4 { 5 string sqlc = @"server=.\sqlexpress;database=MyDataBase15_31;uid=sa;pwd=sa"; 6 using (SqlConnection sqlconn = new SqlConnection(sqlc)) 7 { 8 string sql = @" select * from student "; 9 using (SqlCommand sqlcom = new SqlCommand(sql)) 10 { 11 if (sqlconn.State == ConnectionState.Closed) //ConnectionState 枚举 描述与数据源的连接的当前状态。 12 { //State 指示 SqlConnection 的状态。 13 14 sqlconn.Open(); 15 //Console.WriteLine("成功"); 16 } 17 SqlDataReader reader = sqlcom.ExecuteReader();//若要创建 SqlDataReader,必须调用 SqlCommand 对象的 ExecuteReader 方法,而不要直接使用构造函数。 18 using (reader) 19 { 20 if (reader.HasRows) 21 { 22 //if (reader.Read()) 23 while(reader.Read()) 24 { 25 Console.WriteLine("{0}{1}{2}{3}{4}", 26 reader["sId"], 27 reader["sName"], 28 reader["sAge"], 29 reader["sGender"], 30 reader["sClass"] 31 ); 32 } 33 34 } 35 } 36 } 37 38 } 39 40 } 41 }
F6生成成功,F5报异常:ExecuteReader: Connection 属性尚未初始化。
问题分析:看到Connection,想到数据库连接失败,通过//Console.WriteLine("成功");排除错误,仔细验证SQL语句,没有问题,百度了一下有说代码中多次调用DataReader的函数,可能是因为打开太多的链接,但是检查后还是没有发现问题,这时突然看到问题所在:
using (SqlCommand sqlcom = new SqlCommand(sql))
SqlCommand()缺少参数,真是大意,改正后
using (SqlCommand sqlcom = new SqlCommand(sql,sqlconn))
顺利通过。