里氏转换原则
1,子类直接赋值给父类2,子类调用父类要强制转化------------------------完整的拼接参数过程 parameters 是集合类型cmd.Parameters.Clear();SqlParameter para=new SqlParameter("@id",DbType.Int32); //告诉计算机@id的类型。方便计算机执行para.Value=Convert.ToInt32(“23”);cmd.Parameters.Add(para)这样写,是为了让计算机更效率的执行
-------------------------------DataSet是数据集,是一个临时数据库如何创建一个dataset
Dataset ds=new Dataset("Mydata1"); 括号内是自定义的数据库名字,括号内也可以为空,就是默认的数据库名
//就是一个数据库 里面可以村表 DataTable dt=new DataTable("Mytable");创建列DataColum dc1=new DataColum("id",typeof(int));dc1.AutoIncrement=true;dc1.AutoIncrementSeed=1;dc1.AutiIncrementStep=1;DataColum dc2=new DataColum("name",typeof(string));
将列加到table中dt.Columns.Add(dc1);dt.Columns.Add(dc2);把表加到数据库中ds.Tables.Add(dt);来一行数据
DataRow r1=dt.newRow();r1["name"]="张三";DataRow r2=dt.newRow();r2["name"]="李四";dt.Rows.Add(r1);
dt.Rows.Add(r2);遍历数据
foreach (DataRow r in dt.Rows){ Console.WriteLine("{0}\t"{1},r["id"],r["name"]);}还可以写成xmlds.WriteXml("123.xml");-------------------------SqlDataAdapterSqlDataAdapter sda=new SqlDataAdapter(@"select top 10 * from person order by fid",@"server=连接字符串");Dataset ds=new Dataset();sda.Fill(ds);ds.WriteXml("1.xml")--------------------------------
绑定数据 Combobox和datagridview都可以绑定数据,//导入数据
DataSet ds=new DataSet();SqlDataAdapter sda=new SqlDataAdapter(sql语句,连接语句);sda.Fill(ds);datagridview列要绑定数据表的列然后dgw.DataSource=ds.Tablescombox1.DisplayMember="表中列名" conmbox显示的值
combox1.ValueMember="表中列名" combox的实际值,看不见的combox1.DataSource=ds.Tables--------------------
Sqlhelperstatic class SQLHelper
{ string strConn=System.Configuration.Configurationmanager.ConnectionStrings["sql"].Connectionstring; //常用查询 //ExecuteNonQuery() 返回int //ExecuteReader() 返回SqlDatareader对象 //ExexcuteScalar() //返回object //Adapter //返回DataSetpublic static int ExecuteNonQuery(string commandText, params sqlparameter[] para) //params 是可变数组
{ using(sqlconnection conn=new sqlconnection(strconn)) { using(sqlcommand cmd=new sqlcommand(commandtext,conn)) { if(para !=null) { cmd.parameters.AddRange(para); //装配参数 } if(conn.state==system.data.connectionstate.closed) { conn.Open(); } return cmd.ExecuteNonQuery(); //调用的是系统的,实例ExecuteNonquery } } } }小知识:ExecuteNonQuery(“1”,p1,p2,p3)params 可以把p1 p2 p3自动生成一个数组; 很强大啊----------------------------- 使用sqlhelper 例子 使用上面的sqlhelperstring sql="sql语句";int res=sqlhelper.ExecuteNonquery(sql,null);console.WriteLine(res);------------------------------------SQLhelperExecuteScalar
public static object ExecuteScalar(string cmdtext,params SqlParameter[] para)
{ using(SqlConnection conn=new Sqlconnection(strconn)) { using(SqlCommand cmd=new SqlCommand(cmdtext,conn)) { if(para !=null) { cmd.Parameters.AddRange(para); } if(conn.State==ConnectionState.Closed) { conn.Open(); } reaturn cmd.ExecuteScalar(); } }}----------------------SqlDataReadder 的sqlhelper常用的关闭方法public static SqlDataReader ExecuteReader(string cmdtxt,params SqlParameter[] para)
{ SqlConnection conn=new SqlConnection(strconn) using(SqlCommand cmd=new SqlCommand(cmdtxt,conn)) { cmd.Parameters.AddRange(para); conn.Open(); return cmd.ExecuteReader(CommandBehavior.CloseConnection);//执行完reader自动关闭连接 }}在主函数里的用法//SqlDataReader reader = SQLHelper.ExecuteReader(sql, null);
//using (reader) //{ // if (reader.HasRows) // { // while (reader.Read()) // { // Console.WriteLine("{0}\t{1}\t{2}", reader[0], reader[1], reader[2]); // } // } //} 第二种关闭方法public static SqlDataReader ExecuteReader(out SqlConnection conn, string cmdtxt,params SqlParameter[] para){
conn=new SqlConnection(strconn); using(Sqlcommand cmd=new SqlCommand(cmdtxt,conn)) { cmd.Parameters.AddRange(para); conn.Open(); return cmd.ExecuteReader(); }} #region 关闭连接2 //string sql = @"select id, name, pwd from tblTest"; //SqlConnection conn; //SqlDataReader reader = SQLHelper.ExecuteReader(out conn, sql, null); //using (conn) //{ // using (reader) // { // if (reader.HasRows) // { // while (reader.Read()) // { // Console.WriteLine("{0}\t{1}\t{2}", reader[0], reader[1], reader[2]); // } // } // } //} -------------public static DataSet DataAdapter(string cmdtxt,params SqlPatameter[] para){ Dataset ds=new DataSet(); using(SqlDataAdapter sda=new SqlDataAdapter(cmdtxt,strconn))//SqlDataAdapter 内部实现连接 { sda.SelectCommand.Parameters.AddRange(para); sda.Fill(ds); } return ds;}用法遍历DataSet下所有表的所有数据DataSet ds=SQLhelper.Adapter("select * from tbl")froeach(DataTable dt in ds.Tables){ Console.WriteLine("{0}显示数据",dt.ToString()); foreach(DataRow row in dt.Rows) { Console.WriteLine("{0}\t{1}\t{2}",row[0],row[1],row[2]); }}-------------------复杂的 对象关系namespace _05SQLHelper{ class OBJ { public int Id { get; set; } public string Name { get; set; } public string Pwd { get; set; } }}helper----
public static List<OBJ> MyAdapter(string commandText, params SqlParameter[] para) { // 查询数据 List<OBJ> list = new List<OBJ>(); using (SqlDataReader reader = ExecuteReader(commandText, para)) { if (reader.HasRows) { while (reader.Read()) { list.Add( new OBJ() { Id = Convert.ToInt32(reader["id"]), Name = reader["name"].ToString(), Pwd = reader["pwd"].ToString() } ); } } }return list;
} 执行 List<OBJ> list = SQLHelper.MyAdapter("select id, name, pwd from tblTest", null); for (int i = 0; i < list.Count; i++) { Console.WriteLine("{0},{1},{2}", list[i].Id, list[i].Name, list[i].Pwd); }Console.ReadKey();