📄 ado.txt
字号:
2.5 执行事务处理
private void SQLCommandTransction(string sServer, string sDB)
{
SqlConnection cn = new sqlConnection("SERVER="+sServer+";INTERGATED SECURITY=Ture";DATABASE="+sDB);
SqlTransaction trans;
//start a local transaction
cn.Open(); //注意 ,连接必须在BeginTransaction()方法前打开
trans=cn.BeginTransaction();
cmd.Connection = cn;
cmd.Transaction = trans;
try
{
//insert a row Transaction
cmd.CommandText="INSERT INTO Department VALUES(100,'Transaction 100')";
//This will result in an error
cmd.CommandText="INSERT INTO Department VALUES(100,'Transaction 101')";
cmd.ExecuteNonQuery();
trans.Commit();
}
catch(Exception ex)
{
MessageBox.Show(ex.Message);
trans.Rollback(); //此方法回滚事务处理
}
finally
{ cn.Close(); }
}
3.1 使用SqlDataReader检索快速的,只向前的结果集
private void SQLReaderForward(string sServer, string sDB)
{//set up the connection and command
Cursor.Current=Cusor.WaitCursor;
SqlConnection cn = new sqlConnection("SERVER="+sServer+";INTERGATED SECURITY=Ture";DATABASE="+sDB);
sqlCommand cmd = new sqlCommand("select customerID,commpanyName from Customers"+"where country ='USA',cn");
cmd.CommandType=CommandType.Text;
SqlDataReader rdr;
try
{
cn.Open(); //先连接
rdr=cmd.ExecuteReader(CommandBehavior.CloseConnection);//再实例化rdr,用cmd的ExecuteReader()方法
//ExecuteReader()方法使用CommandBehavior枚举,其成员CloseConnection是指关闭SqlDataReader对象时,关闭相关的connection 对象cn.
lstResults.Items.Clear(); //列表框清空
while(rdr.Read())
{
lstResults.Items.Add(rdr["CustomerID"].ToString()+'\t'+rdr["CompanyName"].ToString());
}
rdr.Close();
}
catch(Exception ex)
{
Cursor.Current=Cusor.Default;
MessageBox.Show(ex.Message);
}
cn.Close();
Cursor.Current=Cusor.Default;
}
说明:在此事例(从NorthWind数据库中检索相关信息)中,先创建一个连接对象cn,它使用集成的安全性关联目标数据库,接着创 建一个新的命令对象cmd,构造函数把其Command属性设为SQL语句;
同时明白显示的关闭所有的ADO.NET对象非常重要.
3.2 返回多个结果集
private void SQLReaderMultipleRS(string sServer, string sDB)
{//set up the connection and command
Cursor.Current=Cusor.WaitCursor;
SqlConnection cn = new sqlConnection("SERVER="+sServer+";INTERGATED SECURITY=Ture";DATABASE="+sDB);
sqlCommand cmd = new sqlCommand("select CategoryID,CategoryName from Categories;"+"select ProductID,ProduceName from products",cn"); //多个SQL语句要分号(;)分开!
cmd.CommandType=CommandType.Text;
SqlDataReader rdr;
try
{ //open the connection and create the reader
cn.Open(); /
rdr=cmd.ExecuteReader(CommandBehavior.CloseConnection);
//loop through all the results sets
lstResults.Items.Clear();
bool bMoreResults=true; //赋true,确保至少做一次循环
while(bMoreResults)
{ lstResults.Items.Add(rdr.GetName(0)+'\t'+rdr.GetName(1));
while(rdr.Read())
{ //把列名写道列表框中,在明处加制表符,使列表框整齐排列
lstResults.Items.Add(rdr.GetInt32(0)+'\t'+rdr.GetString(1));
}
bMoreResults=rdr.NextResult(); //此方法:若还有一个结果集,NextResult()方法就返回true;否则返回flase,退出while循环
rdr.Close();
}
catch(Exception ex)
{
Cursor.Current=Cusor.Default;
MessageBox.Show(ex.Message);
}
cn.Close();
Cursor.Current=Cusor.Default;
}
---080327晚上
DataSet是ADO.NET的核心,它是一个保存在内存中的数据库,标号斯组成数据表的一组相关数据,约束规则和表关系信息.
因为DataSet完全独立于数据源,所以在DataSet对象在中对数据的修改不会影响数据源,除非把这些修改内容返回到数据源中.
...图片...
创建新的DataSet对象有几种不同的方式,所用的创建方法取决于要创建的DataSet的类型.
可以通过调用DataSet构造函数来创建DataSet,所创建的DataSet 对象为一个空对象.当采用该方法创建时,可以指定DataSet名称,如果不指定则默认为NewDataSet.
也可以用DataSet.Copy方法创建DataSet,复制已有的DataSet.此方法会把原先DataSet的模式或关系结构,所有的数据行,行版本和行状态信息都复制到新的DataSet中.
4.1
private void CreateDataSet(string sDSName)
{
DataSet ds = new DataSet(sDSName);
//使用构造函数创建一个空的DataSet对象实例ds.
}
4.2
private void CreateDataSet(string sDSName)
{
DataSet ds = new DataSet();
ds.Tables.Add(sDSName); //用DataTablesCollection.Add方法创建的DataTable,并把它添加到DataSet的Table集合中.
}
4.3
private void CreateDataColumn(string sDSName)
{
DataTable dt =new DataTable();
DataColumn dc =new DataColumn(sDSName,System.Type.GetType("System.String")); //创建一个类型为DataColumn的字符串,并把列名设置为传递进来的字符串变量.
dc.AllowDBNull = false;
dc.Maxlength = 50;
dt.Columns.Add(dc); //把名位dc的 DataColumn对象添加到表 的Columns集合中
dt.Columns.Add("RowCount",System.Type.GetType("System.Int32"),"Count("+dc.ColumnName+")");
//上面这句...使用DataColumnCollection.Add 方法创建一个名为RowCount的新的DataColumn对象,并添加到DataTable中.
DataRow dr =dt.NewRow(); //使用NewRow()方法创建一个新的DataRow对象 dr,然后把数据放在DataRow指定的列中
dr[sDSName] ="Michael";
dt.Rows.Add(dr); //最后把名为dr的DataRow对象实例添加到DataTable的Rows集合中.
}
注意:在把行添加到表中,会计算count表达式,并使RowCount列的数据自动更新为1,表示已经把一行添加到DataTable中了.
4.4
private void CreateDataConsraint(string sUCName,string sPKName)
{ DataTable dt =new DataTable();
DataColumn dc =new dt.Columns.Add(UCName);
dt.Columns.Add(sPKName);
UniqueConstraint uc =new UniqueConstraint(dc);
dt.Constraint.Add(uc);
DataColumn[] dtkey =new DataColumn[1];
dtkey[0] =dt.Columns[sPKName]; //把DataColumn数组dtkey设为名为sPKName的DataColumn对象实例
dt.PrimaryKey =dtkey; //把DataColumn数组dtkey 设为DataTable的主键
}
说明:例程开头传递两个包含新的DataColumn名称的字符串变量.用Add方法和两个传递进来的字符串变量创建两个DataColumn,并添加到dt中;
接着用UniqueConstraint构造函数和名为dc的DataColumn参数创建uc;然后使用Add方法添加到DataTable中.
4.5
private void CreateDataRelation(string sDRelName)
{ DataSet dsSales =new DataSet("Sales");
DataTable dtStaff =dsSales.Tables.Add("Products");
DataTable dtInvoices =dsSales.Tables.Add("Invoices");
DataColumn dcParent =dtStaff.Columns.Add("productID");
DataColumn dcChild =dtInvoiecs.Columns.Add("productID");
DataRelation drelSales =new DataRelation(sDRelName,dcPart,dcChild,true);
dsSales.Relations.Add(drelSales);
}
说明:该事例创建一个名为productID的DataColumn,并添加到连个DataTable的Columns集合中;接着把传递近来的字符串变量作为DataRelation名,利用两个DataTable中用于建立表之间关系的DataColumn,创建一个DataRelation对象实例drelSales;最后添加到DataSet中.
5.1 用SqlDataAdapter类填充DataSet
private void FillDataSetSql(string sServer, string sDB,string sTable)
{ //次方法对应的三个参数分别用作SQL SERVER系统名称,数据库名称,表名称.
SqlConnection Sqlcn = new sqlConnection("SERVER="+sServer+";INTERGATED SECURITY=Ture";DATABASE="+sDB);
SqlCommand cmdSelect = new SqlCommand("SELECT * FROM"+sTable,Sqlcn);
SqlDataAdapter SqlDA = new SqlDataAdapter();
SqlDA.SelectCommand=cmdSelect;
DataSet ds =new DataSet();
try
{
SqlDA.Fill(ds,sTable);
}
catch(Exception ex)
{
MessageBox.Show("Fill SqlDataAdapter erreo::"+ex.Tostring());
}
grdResults.DataSorce =ds; //DataGrid控件
grdResults.DataMember =sTable; //其DataMember属性设为表,并显示给用户
}
说明:创建 SqlConnection对象实例的ConnectionString属性设为构造函数参数;而 SqlCommand对象的CommandText属性设为一个SQL Select语句,且把Connection属性设为前面创建的Sqlcn对象实例;
创建SqlDataAdapter对象实例,并把它的SelectCommand属性设为SqlCommand对象,接着创建空的DataSet对象,在Try-Catch中用Fill 方法填充;用该方法是,若连接每打开,它会自动打开与之相关联的连接,如果Fill 方法打开了连接,也会在填充完DataSet后自动关闭连接.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -