先从数据库中取出结果集后进行处理数据后再UpDate更新到数据库。
如果只想读取和显示数据,只需要使用数据读取SqlDataReader即可,但要处理数据然后更新数据库(增加、更改),局需要数据集DataSet和数据适配器SqlDataAdaper。
SqlDataAdapter的用法:
读取数据用SqlDataReader是固定的,但是处理数据分为两种情况。
一、直接拼SQL语句,适用于简单的表。
二、用参数——用SqlDataAdaper适用于复杂的表。带参数方便进行类型转换。其中删除一条记录不用带参数,直接拼SQl语句,cmd.ExecuteNonQuery()即可。
定义个全局变量 Private SqlConnection m—con =null;然后在方法内部 m-con = new 出来,断开式连接体现在之后使用只要m-cn.Open();j即可打开。
数据库连接方法:
public bool db_check()
{
bool flag = false;
string ConnectionString ="data source ="+ dbServerName.Text+";initial catalog="+dbName.Text+";
user id="+dbUsername.Text+";
password="+this.dbPassword.Text+";";
try
{
m_con = new SqlConnection(ConnectionString);
m_con.Open();
MessageBox.Show("数据库连接成功");
flag = true;
}
catch
{
MessageBox.Show("数据库连接不成功");
flag=false;
}
return flag;
}
一、C#连接SQL数据库代码:
public DataTable Read()
{
DataTable dt = new DataTable();//创建新表
dt.Columns.Add("col_1");//新建表中的列
dt.Columns.Add("col_2");
string ConnectionString = "data source =localhost;initial catalog =pubs;user id =sa;password=sa";
sqlConnection Conn = new SqlConnection(ConnectionString);
if(Conn,State==ConnectionState.Open)
{
Conn.Close();
}
Conn.ConnectionString=ConnectionString;
Conn.Open();
try
{
SqlCommand cmd = new SqlCommand(Select * from tab_name",Conn);
SqlDataReader myReader =cmd.ExecuteReader();//执行SQL语句的真正查询
int a =0;
int b=0;//用来接受已经查询出来的字段
while(myReader.Read())//每次循环查到一行
{
DataRow dr=dt.NewRow();//没循环一次新建一行
dr[0]=myReader.Getint32(0).ToString();//表示接受第一个字段(String型)
dt.Rows.Add(dr);//每循环一次把dr加进去
}
myReader.Close();
conn.Close();
}
catch(Exception ex)
{
MessageBox.Show(ex.Message.ToString();
}
return dt;
}
二、Command对象
1、SqlCommand cmd = new SqlCommand(SqlText,conn);//读取数据,要和SqlDataAdapter连用,再和ExecuteReader或ExecuteScalar连用
2、SqlCommand用法有ExecuteNonQuery、ExecuteReader、ExecuteScalar三种,其中ExecutrReader(所有查询),ExecuteScale(首行首列查询)
ExecuteNonQuery为执行T-SQL语句;如果一个类有多条SQL语句要执行用三句这个(等同于1)
SqlCommand cmd = con,CreateCommand();
cmd.CommandTest="Create table tab_name(name varchar(20),password varchar(20))";
cmd.ExecuteNonQuery();
如果一个类只有一个SQL语句要执行,使用(1),与ExecuteReader、ExecuteScalar相匹配,三句与ExecuteNonQuery相匹配;
三、关于数据读取器 SqlDataReader对象,他是和SqlCommand cmd =new SqlCommand(SqlText,con)它连用的
1、只读取数据:
SqlCommand cmd = new SqlCommand("select * from tab_name",Conn);
SqlDataReader myReader = cmd.ExecuteReader();//执行SQL
while(myReader.Reade())
{
DataRow dr =dt.NewRow();
dr[0]=myReader.Getint32(0).ToString();
dr[1]=myReader.Getint32(1).ToString();
dt.Rows.Ad(dr);
}
2、GetSchemaTable方法,返回一个已经填充的DataTable实例(可以一次读出完整表的内容)
DataTable schema=reader.GetSchemaTable();
foreach(DataRow row in schema.Rows)
{
foreach(DataColumn col in schema.Columns)
{
Console.WriteLine(col.ColumnName+"="+row[col});
}
}
四、数据适配器:SqlDataAdapter
SqlDataAdapter da = new SqlDataAdapter();
da.Fill();
da.SelectComand=new SqlCommand(sqlText,con);
DataTable dt new DataTablae();
dt.Select(where 条件,升降序);
填充数据集有两种方法:
:使用数据适配器
:从XML文档中读取数据
SqlDataAdapter da =new SqlDataAdapter();
da.SelectCommand =new SqlCommand(sqlText,con);
DataSet ds =new DataSet();
da.Fill(ds,"tab_name");//Fill方法内部使用数据读取器访问表模式和数据,然后使用他们填充数据集
数据集的筛选和排序
DataTableCollection dtc =ds.Tables;//通过这句把DataSet中的所有表都给了Table表集合
//以下两句是筛选条件
string fl ="country='Germany'";//where 条件
string srt ="companyname asc"; //降序
foreach(DataRow row in dtc["customers"].Select(fl,srt))//这是用法,dtc表集合中的customers表 .Select() 就是筛选条件