1.三者之间的区别:
ExecuteNonQuery/ExecuteReader/ExecuteScalar
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;
}