# **兩種組合:command + dataRead 或者是 dataAdapter + dataSet + dataGrieview**
# 1、Command + DataRead( )
需要一直連接數據庫。
1、命名空間:using System.Data.SqlClient;
2、與數據庫相關的對象首先必須用sqlconnection方法創建一個連接對象(取名為conn);其次,與數據庫有關的增、刪、改、查操作,都必須創建 SqlCommand 對象(命名為sqlcmd)來調用其中的方法;
3、用到的方法是Read方法;但該方法無構造函數,所以需要通過sqlcommand對象的 executeRead()方法來生成;
所以這就需要先創建 sqlcommand 對象(取名為 sqlcmd),再通過 sqlcmd 去調用 executeRead 方法(表達為:sqlcmd.ExecuteRead())。
4、一共實例化了3個對象;sqlconn、sqlcomm、sqldr。
5、用完需要關閉的資源:數據庫連接對象 conn 與dataread 對象;
代碼如下:(可以創建一個富文本 richtextbox 來做這個操作,并且雙擊 form 對話框,就可以得到 private void Form1_Load(object sender, EventArgs e) ) 。
```
private void Form1_Load(object sender, EventArgs e)
{
//實例化數據庫連接對象 conn
SqlConnection conn = new SqlConnection ("server = CA9; database = 審圖表; uid = sa; pwd = Am******23 ")
// 實例化 command 對象,并輸入一條要執行的 sql 語句。這里我們想查詢的是查找 dbo.審核信息這張表中的所有列,并且用ID 這一列的正序來查。逆序是desc。
SqlCommand sqlcmd2 = new SqlCommand ("select * from dbo.審核信息 order ID asc", conn) // 括號內兩個參數,一個是需要執行的 sql 查詢語句,一個是匹配的連接對象conn。
//實例化 DataRead 對象,通過 sqlcmd 對象的executeRead方法來創建
SqlDataReader sqldr = sqlcmd2.ExecuteRead( );
//分別實例化三個對象以后,開始執行
conn.Open( );
if (sqldr.HasRows) //用 sqldr 對象的 HasRows 方法來檢查數據庫中是否有數據,如果有則是 true。
{
while(sqldr.Read() ) // 則用sqldr 對象的 Read 方法來一行行遍歷數據
{
richTextbox.Text += sqldr["ID"] + “ ” + sqldr["項目編號"] + "\n"// 在我們添加的富文本框中,依次輸出ID編號及項目編號。調用對象的ID列,用的表達形式是sqldr["列名"]。
}
}
sqldr.Close( ); //需要關閉 sqldr 對象
conn.Close( ); //需要關閉數據庫
}
```
> 注:兩個sqldr 中間需要再加入空格`+" "`,才不會系統出錯。

# 2、DataSet + DataAdapter( ) + DataSet() + DataGridViews控件
> 如果用這個組合,則無需設置 command ,也無需 conn.open()
不需要一直連接數據庫。
過程如下圖:

1、DataSet對象是數據集(可以理解為臨時數據庫)、DataAdapter對象用來在 set 數據集、數據庫之間進行增刪改查操作。DataGridView 空間是 set 數據集的體現。
dataset數據集中,除了是一張張dataTable數據表的集合,也可以是一個個數據存儲關系的集合。所以在dataGridview控件中指定datasourcr的時候,用的是ds.Table["temp"],意思是調用 set 集合中的 Table(表格),然后方括號里面是表的名字。
可以看出 我們可以在同一個 set 對象中設置不同的臨時表 Table,取名為 Table1,Table2等。
一共實例化了3個對象。無需打開數據庫,因為DataAdapter自己會打開并關閉。
```
//實例化連接對象
SqlConnection sqlconn = new SqlConnent( "server = CA9A; database = 審圖表; uid = sa; pwd = xxx");
//實例化 dataadapter 對象,
SqlDataAdapter sqlda = new SqlDataAdapter ("select * from dbo.審圖表", sqlconn);
//實例化 dataset 對象
DataSet myds = new DataSet( );
sqlda.Fill( myds, "temp_table"); // 用 sqlda 對象的 Fill 方法來填充數據集。
//將 set 數據集體現在 datagridview 控件中
DataGridView1.DataSource = myds.Tables["temp_table"];
```
> 也可以直接在 dataGridView 控件屬性中指定控件的數據源,一旦指定了,系統會自動生成dataAdapter 以及dataSet對象。

# 例子datagridview DataGridView
登錄界面用
`dataGridView1.Rows[0].Cells["密碼"]` 或者是`dataGridView1.Rows[0].Cells[2]`來表示行列。
或者是用`DataGridView[0,2]`即可,但實際運行會提示錯誤。
如果不通過 DataGridView 而是直接用 DataSet 的話:
`ds.Tables["登錄"].Rows[0][2].ToString() != LogPwd;`
```
private void button1\_Click(object sender, EventArgs e)
{
LogID = richTextBox1.Text.Trim();
LogPwd = richTextBox2.Text.Trim();
//連接到“XMEDI”中的dbo.登陸賬戶,與這個表里面的賬戶共用信息
SqlConnection sqlconn = new SqlConnection("server=");
SqlDataAdapter da = new SqlDataAdapter("select \* from dbo.登陸賬戶 where 員工工號 = " + LogID + "and 密碼 =" + LogPwd, sqlconn);
//不要直接寫"select \* from dbo.登陸賬戶",而是直接根據用戶輸入的員工編號去建一個sqlda,在這里直接判斷完,后面就不需要在寫w.指針了。但要注意寫的sql語句應該是更VBA那樣用加號+拼接起來。不能直接寫"select \* from dbo.登陸賬戶 where 員工工號=LogID and 密碼 = LogPwd",因為這樣LogID和LogPwd就無法被識別了。
//如果用戶錄入的員工編號及密碼與數據庫中數據一致,則打開主窗口
DataSet ds = new DataSet();
da.Fill(ds,"登錄");
if (ds.Tables\["登錄"\].Rows.Count > 0) //說明dbo.登陸賬戶表中有數據
{
Form2 form2 = new Form2();
form2.ShowDialog();
}
else
{
MessageBox.Show("登錄失敗");
}
}
```

### 判斷登錄條件

- 幫助文檔 microsoft helo viewer
- c#開發環境及visual studio安裝注意事項
- c#程序基本結構-基本語法
- Q1: public static void main(String[] args) 是什么意思
- Q2: c#命名空間+Main方法
- Q3:注釋+命名規則+代碼規則
- Q4: c#語句 system => console
- Q5: 數據類型 .net
- Q5: 常用名字、變量、運算符
- Q6: 對話窗輸入-屬性
- Q7: 遞歸
- Q8:決策分支、條件判斷語句 if 語句
- Q9:數組
- Q10:字符串
- Q11:對象、類、訪問權限、靜態動態函數
- Q12:方法及參數——繼承于類
- Q13:構造函數
- Q14:繼承——base 關鍵字
- Q15:多態、虛方法、接口
- Q16:創建窗體應用、控件
- Q17:Ado數據訪問、連接 sqlserver 數據庫
- Q18: 讀取數據command + DataRead( )、DataSet + DateAdapter
- Q19: Entity Framwork、entity 與 ADO.net的區別
- Q20: 對話框、文件、文件夾
- Q21: 導入excel數據、更新到 dbo 數據庫中
- Q26: 獲取 excel 中每個 sheet 的表名
- Q22: 兩個窗體之間數據+方法傳遞
- Q23: 數學對象
- Q24: c#網站編寫
- Q25: visual studio2017如何查看幫助
- Q27: c# dictionary 字典對象
- Q28: 數組與dataTable互相轉化