Command物件中包含了提交給資料庫系統的存取訊息
OleDbCommand與SqlCommand對象,它們的基本物件與操作方法是相同的,在此僅介紹OleDbCommand的用法,SqlCommand的用法類推即可。
最常用初始化Command物件的方法是在建立Command實例中帶入兩個參數
OleDbCommand myComm=new OleDbCommand(strQuery,myConnection);
strQuery為SQL語句或儲存過程名,myConnection是建立的Connection物件實例
Command物件主要的屬性有
Connection:
CommandText:設定或取得Command物件使用的Connection物件實例
CommandType:StoredProceduce、TableDirect、Text(標準SQL語句)
Parameters:取得參數值集合
ExecuteReader:執行CommandText指定的SQL語句或儲存過程名,傳回類型為DataReader
ExecuteNonQuery:與ExecuteReader功能相同,只是傳回值為執行SQL語句或儲存過程受影響的記錄行數
DataReader--SqlDataReader、OleDbDataReader
FieldCount:顯示目前操作記錄的欄位總和
IsClosed:判斷DataReader是否關閉
Close:關閉DataReader
GetString:以String傳回指定列中的值
GetValue:以自身的型別傳回指定列中的值
GetValues:傳回目前記錄所有欄位的集合
Read:唸下一筆記錄範例:
<% @ Page Language="C#" %>
<% @ Import Namespace="System.Data"%>
<% @ Import Namespace="System.Data.OleDb"%>
-------------------------------------------
<% @ Import Namespace="System.Data.SqlClient"%>
<Script Language="c#" Runat="Server">
OleDbDataReader dr;
String myconnstring="Provider=Microsoft.Jet.OLEDB.4.0; DataSource="+Server.MapPath(".")+"..mdb";
string sql=".."
OleDbConnection my_conn=new OleDbConnection(myconnstring);
OleDbCommand my_comm=new OleDbCommand(sql,my_conn);
my_comm.Connection.Open();
dr=my_comm.ExecuteReader();
//DataGrid dg
dg.DataSource=dr
dg.DataBind();
</Script>
<head>
<% while(dr.Read())
...{;}
%>
</head>
DataSet DataAdapter
DataAdapter是與DataSet搭配使用的
OleDbDataAdapter my_adapter=new OleDbDataAdapter();
-------------------------------------------------
SqlDataAdapter my_sqladapter=new SqlDataAdapter();
my_adapter.SelectCommand.Connection=my_conn;
或
my_adapter.UpdateCommand.Connection=my_conn;
my_adapter.DeleteCommand.Connection=my_conn;
my_adapter.InsertCommand.Connection=my_conn;
如果需要執行Sql語句,那麼也必須給對應的CommandText屬性賦值。 http://sucai.downcodes.com/
my_adapter.SelectCommand.CommandText=strSelect;
my_adapter.UpdateCommand.CommandText=strUpdate;
my_adapter.InsertCommand.CommandText=strInsert;
my_adapter.DeleteCommand.CommandText=strDelete;
如果只是查詢資料庫,則可以建立DataAdapter實例時就完成上述工作
OleDbDataAdapter MyAdapter=new OleDbDataAdapter(sql,my_conn);
DataSet ds=new DataSet();
OleDbConnection my_conn=new OleDbConnection(myconnstring);
OleDbDataAdapter my_adapter=new OleDbDataAdapter(sql,my_conn);
my_adapter.fill(ds,"score");
DataGrid score;
score.DataSource=ds.Table["score"].Defaultview;
score.DataBind();
//InsertCommand
DataRow dr=ds.Table["Score"].NewRow();
dr["name"]=..
ds.Tables["Score"].Rows.Add(dr);
//update
DataAdapter.Update(ds,"Score");
//modify
DataRow dr=ds.Tables["Score"].Rows[0];
dr["name"]=;
//Delete
DataRow dr=ds.Talbes["Score"].Rows[0];
dr.Delete();
//註:
OleDbConnection my_conn=new OleDbConnection(myconnstring);
OleDbDataAdapter my_adapter=new OleDbDataAdapter(sql,my_conn);
OleDbCommandBuilder custCB=new OleDbCommandBuilder(my_adapter);//DataAdapter在資料改變時,並不能自動產生(Transact- SQL),所以一定要使用CommandBuilder,它能自動產生Sql語句,!就此一步
RejectChanges是DataSet,DataTable,DataRow共有的方法使操作物件拒絕已經發生的改變,使資料復員
if(DataSet.HasErrors)
...{
DataSet.RejectChanges();
}
else...{ DataSet.AcceptChanges();}
-------------------------------------------------- -------------------------------------------------- ------------------------------
DataReader->DataTable
public static DataTable ConvertDataReaderToDataTable(SqlDataReader dataReader)
...{
/**//**//**////定義DataTable和模式
DataTable datatable = new DataTable();
DataTable schemaTable = dataReader.GetSchemaTable(); //匯入一個資料表的表結構
try
...{ /**//**//**////動態新增資料表的資料列
foreach(DataRow myRow in schemaTable.Rows)
...{
DataColumn myDataColumn = new DataColumn();
myDataColumn.DataType = myRow.GetType();
myDataColumn.ColumnName = myRow[0].ToString();
datatable.Columns.Add(myDataColumn);
}
/**//**//**////新增表格的數據
while(dataReader.Read())
...{
DataRow myDataRow = datatable.NewRow();
for(int i=0;i<schemaTable.Rows.Count;i++)
...{
myDataRow[i] = dataReader[i].ToString();
}
datatable.Rows.Add(myDataRow);
myDataRow = null;
}
schemaTable = null;
/**//**//**////關閉資料讀取器
dataReader.Close();
return datatable;
}
catch(Exception ex)
...{
/**//**//**////拋出型別轉換錯誤
SystemError.SystemLog(ex.Message);
throw new Exception(ex.Message,ex);
}
}
}
}