ADO.NET学习笔记(四)
来源:互联网 发布:淘宝导航栏尺寸 编辑:程序博客网 时间:2024/06/12 22:50
(2)简单的利用CmboBox进行省市对应选择:using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Windows.Forms;using System.Data.SqlClient;using System.Configuration;namespace 省市选择{ public partial class Form1 : Form { public Form1() { InitializeComponent(); } //声明静态字符串替代全局常字符串.........最好的方法是到App.cinfig里写连接字符串 //private const string CoonStr = @"Data Source = .\SQLEXPRESS;AttachDBFilename = |DataDirectory|\SS.mdf;Integrated Security = True; User Instance =True"; private void Form1_Load(object sender, EventArgs e) { /* Person p1 = new Person(); p1.Name = "tom"; p1.Age = 30; //MessageBox.Show(p1.ToString());//一个类(Person)的对象默认的ToString()方法是打印这个类的类名即:省市选择.Person (完整类名) Person p2 = new Person(); p2.Name = "kkkk"; p2.Age = 20; cmb省.Items.Add(p1); cmb省.Items.Add(p2); //设置CmboBox的DisplayMenber属性为Name,就会显示对象的Name属性的值 cmb省.Items.Add(p1); cmb市.Items.Add(p2); return; */ //最终改为配置文件里引用最好,但是他的dll动态连接库没有自动引入,需要添加引用 System.configuration,并using进来才行,接下来用下面的语句引用,使用连接字符串的名字 // 使用顺序为:添加App.Config文件->添加->新建项->常规->应用程序配置文件->App.Config,其是.NET程序通用的配置文件,在ASP.NET也同样使用。 string ConnStr = ConfigurationManager.ConnectionStrings["ConnStr"].ConnectionString; using (SqlConnection conn = new SqlConnection(ConnStr)) { conn.Open(); using (SqlCommand cmd = conn.CreateCommand()) { cmd.CommandText = "select * from promary"; using (SqlDataReader dateReader = cmd.ExecuteReader()) { while (dateReader.Read()) { ProvinceItem item = new ProvinceItem(); item.ID = dateReader.GetInt32(dateReader.GetOrdinal("proID")); // item.Name = dateReader.GetString(dateReader.GetOrdinal("proName"));有时出错可能是敲错某个不起眼的字母或多出个空格,干脆重写一遍 item.Name = dateReader.GetString(dateReader.GetOrdinal("proName")); cmb省.Items.Add(item); } } } } } private void cmb省_SelectedIndexChanged(object sender, EventArgs e) { ProvinceItem item = (ProvinceItem)cmb省.SelectedItem; int ProID = item.ID; //类型间可以相互转换,但是你看到的数据类型和实际的数据类型不一定相同,如下,object 是所有类型的基类,所以可以使obj指向item,如果实际是相同类型的但是还得转换才行,不然他不会自动转换,指针指认变量数据类型,不认实际对象 //object obj= item; //ProvinceItem p2 = (ProvinceItem)obj; string ConnStr = ConfigurationManager.ConnectionStrings["ConnStr"].ConnectionString; using (SqlConnection conn = new SqlConnection(ConnStr)) { conn.Open(); using (SqlCommand cmd = conn.CreateCommand()) { cmd.CommandText = "select * from city where ProID=@ProID"; cmd.Parameters.Add(new SqlParameter("ProID", ProID)); using (SqlDataReader dateReader = cmd.ExecuteReader()) { cmd.CommandText = ""; cmb市.Items.Clear(); while (dateReader.Read()) { string cityName = dateReader.GetString(dateReader.GetOrdinal("cityName")); cmb市.Items.Add(cityName); //ProvinceItem item = new ProvinceItem(); //item.ID = dateReader.GetInt32(dateReader.GetOrdinal("proID")); //// item.Name = dateReader.GetString(dateReader.GetOrdinal("proName"));有时出错可能是敲错某个不起眼的字母或多出个空格,干脆重写一遍 //item.Name = dateReader.GetString(dateReader.GetOrdinal("proName")); //cmb省.Items.Add(item); } } } } } class ProvinceItem { public string Name { get; set; } public int ID { get; set; } //public override string ToString() //{ // return Name; //} } //自写的类必须在From类下面,并与public partial class Form1 : Form并列 /* class Person { public int Age { get; set; } public string Name { get; set; } //override是覆盖元原来的ToString()方法,相当于重构函数,ToString()方法返回什么,就显示什么 public override string ToString() { return Name; } } */ }}