iT邦幫忙

0

C# SqlCommand和SqlDataAdapter的區別

  1. SqlCommand對應DateReader
  2. SqlDataAdapter對應DataSet
  • SqlCommand的執行效率比較高,但不靈活,功能也有限
  • SqlDataAdapter的效率要低點,它是連接的,可隨時更新數據,功能強大。
  • 很多編程用其中一種就可以了。

SqlCommand是C#中與Sql數據庫打交道的對象,幾乎所有的Sql數據庫操作都需要使用該對象來實現,但其功能有限,只是簡單的實現了與Sql數據庫的接口而已;

//以下使用陳述式寫法  聽說可以  自動生成 try,finally功能
using (SqlConnection connection = new SqlConnection(connectString))
{
    using (SqlCommand command = new SqlCommand())
    {
        command.Connection = connection;
        command.CommandType = CommandType.Text;
        command.CommandText = "INSERT into [dbo].[Table_Friber_SN] (Friber_SN, SN, note, OP) VALUES (@Friber_SN, @SN, @note, @OP)";

        command.Parameters.AddWithValue("@Friber_SN", LblNewSN.Text);
        command.Parameters.AddWithValue("@SN", (int)DS.Rows[0][0] + 1);
        command.Parameters.AddWithValue("@note", "新增SN");
        command.Parameters.AddWithValue("@OP", TxtOP.Text);

        connection.Open();

        int recordsAffected = command.ExecuteNonQuery();
        LblReturn.Text = recordsAffected.ToString();

        LblC9C12.Text = "xxxx";
    }
}
  • SqlDataAdapter是一個功能強大的SqL數據適配器,也用於操作Sql數據庫,但它的操作都要通過SqlCommand來實現(有一個屬性對象的類型就是SqlCommand),
  • 也就是說,可以把SqlDataAdapter看作是一個把一些特殊功能封裝了、增強了的SqlCommand!
  • adapter是和dataset打交道的,command不能直接與dataset打交道,要通過adapter.

adapter的定義是基於command的,當然也可以之間在定義adapter的時候寫入sql語句和connection對象

// 連線str
string connectString = "Server=dataserver; Database=FormericaOE; User ID=xxx; Password=xxx; ";
// 建構 sqlConnection連線物件
SqlConnection conn = new SqlConnection(connectString);

string selectstr = "SELECT MAX(SN)" + "FROM[FormericaOE].[dbo].[Table_Friber_SN]";
SqlDataAdapter da = new SqlDataAdapter(selectstr, connectString);

DS.Clear(); //先清空 DataTable
da.Fill(DS); //用SqlDataAdapter 填入 DS
  • 想要把數據顯示出來就不得不用到adapter來給dataset傳值
  • 而command不能直接傳值給dataset

可以這樣理解: DataSet用來裝表的集合,裏面可以裝從SqlDataAdapter中返回的一系列的DataTable
如果返回的有多張表,那麼我們可以通過索引的方式來找到想要的表:
DataTable dt = ds.Tables[0];或DataTable dt = ds.Tables["products"];

DataSet可以直接做爲數據控件的數據源,也可以從中獲取表或表的視圖來做爲數據源.如:

  • this.DataList1.DataSource = dt;
  • this.DataList2.DataSource = dt.Tables[0];
  • this.Datalist3.DataSource = dt.Tables[0].DefaultView;
  • 這三句的效果都是一樣的.

尚未有邦友留言

立即登入留言