1.三者之間的區別:
command的命令的三個區別:
ExecuteNonQuery:返回所影響的行數,select影響的行數爲0,不返回任何數據。
ExecuteReader:與查詢語句一起使用,返回一個數據閱讀對象datareader
ExecuteScalar:返回查詢的第一行的第一列數據
2.dataset和datareader之間的聯繫:
二者都是需要是SQL語句想聯繫。中間需要適配器datadapter或者SQL的直接執行相互聯繫
dataset是數據的一次性填充
dataadapter.selectcommand=cmd (適配器和SQL)
da.fill(dataset) (適配器填充dataset)
datasource=ds (數據源是dataset)
datareader是數據一條填充,是流動的dataset
datareader=cmd.executenonquery() (datareader和SQL)
datasource=dr (數據源是datareader)
優缺點:
DataReader
優點:讀取數據速度快
缺點:只能向前讀取數據,直到需要讀取的數據都讀取完了才能斷開連接
適用情況:對返回的數據不多,且只做少量的處理時建議使用
DataSet
優點:連接一次即可讀取所有數據,可立即關閉連接,節省時間
缺點:佔用內在較多
適用情況:讀取大量數據,或需要對數據做大量處理時建議使用
3.datatable
DataTable datatable = new DataTable();
動態添加表的數據列
for (int i = 0; i < dataReader.FieldCount; i++)
{
DataColumn myDataColumn = new DataColumn(); 列是:datacolumn =new datacolumn()
myDataColumn.DataType = dataReader.GetFieldType(i);
myDataColumn.ColumnName = dataReader.GetName(i);
datatable.Columns.Add(myDataColumn);
}
添加表的數據
while (dataReader.Read())
{
DataRow myDataRow = datatable.NewRow(); 列和行的不同之處:datarow=datable.newrow()
for (int i = 0; i < dataReader.FieldCount; i++)
{
myDataRow[i] = dataReader[i].ToString();
}
datatable.Rows.Add(myDataRow);
myDataRow = null;
}