要求包含數據
解决方案 »
- 串口通信
- Winform程序发布的问题
- 请教大侠们,小妹做的下载数据库中的2进制数据文件.下载文件没有显示内容,只显示System.Byte[]!非常着急!
- 关于 delegate 和 invoke 的问题
- 数据库连接问题
- 这是个微软MAC的考试题目,我不知道该怎么解释
- 相同的程序,为什么控制台调试 比 窗口调试慢很多很多
- 全局静态变量的改变会让内存持续消耗?
- 用vc++写的ocx控件,在vc.net中使用发现了很奇怪的问题?大家进来看看!
- 自己写程序如何发送邮件? 需要什么条件?
- c#调用delphi开发的webservice接口,中文返回值为乱码(一个汉字返回???),如何进行转换?
- 头疼的问题,关于继承combobox后的datamanager属性,help~~
DataTable dt=new DataTable();
DataRow row=new DataRow();while(reader.Read())
{
row["xxx"]=reader["xxx"];
dt.Rows.Add(row);
}大概就这个意思,代码是随手写的,可能有不对的地方,你自己测试吧!
DataRow row;
while(reader.Read())
{
row=new DataRow(); row["xxx"]=reader["xxx"];
dt.Rows.Add(row);
}
dt.Load(dr);就这样?
DataAdapter填充是最快的
/// 将DataReader转为DataTable
/// </summary>
/// <param name="DataReader">DataReader</param>
public static DataTable ConvertdrTodt(SqlDataReader dataReader)
{
///定义DataTable
DataTable datatable = new DataTable(); ///动态添加表的数据列
for (int i = 0; i < dataReader.FieldCount; i++)
{
DataColumn mydc = new DataColumn();
mydc.DataType = dataReader.GetFieldType(i);
mydc.ColumnName = dataReader.GetName(i);
datatable.Columns.Add(mydc);
} ///添加表的数据
while (dataReader.Read())
{
DataRow mydr = datatable.NewRow();
for (int i = 0; i < dataReader.FieldCount; i++)
{
mydr[i] = dataReader[i].ToString();
}
datatable.Rows.Add(mydr);
mydr = null;
}
///关闭数据读取器
dataReader.Close();
return datatable;
}
Private Function ReaderToTable(ByVal reader As SqlClient.SqlDataReader) As DataTable Dim newTable As New DataTable()
Dim col As DataColumn
Dim row As DataRow
Dim i As Integer For i = 0 To reader.FieldCount - 1 col = New DataColumn()
col.ColumnName = reader.GetName(i)
col.DataType = reader.GetFieldType(i) newTable.Columns.Add(col)
Next While reader.Read row = newTable.NewRow()
For i = 0 To reader.FieldCount - 1
row(i) = reader.Item(i)
Next newTable.Rows.Add(row)
End While Return newTable
End Function//不知道翻译得对不对
private DataTable ReaderToTable(IDataReader reader)
{
DataTable Result = new DataTable(); for (int i = 0; i < reader.FieldCount; i++)
{
DataColumn col = new DataColumn();
col.ColumnName = reader.GetName(i);
col.DataType = reader.GetFieldType(i);
Result.Columns.Add(col);
}
while (reader.Read())
{
DataRow row = Result.NewRow();
for (int i = 0; reader.FieldCount; i++)
{
row[i] = reader[i];
}
Result.Rows.Add(row);
}
return Result;
}
Sub Page_Load(Sender As Object, E As EventArgs)
Dim DS As DataSet
Dim MyConnection As SqlConnection
Dim MyCommand As SqlDataAdapter
MyConnection = New SqlConnection("server=(local);database=northwind;Trusted_Connection=yes")
MyCommand = New SqlDataAdapter("Ten Most Expensive Products", MyConnection)
MyCommand.SelectCommand.CommandType = CommandType.StoredProcedure
DS = new DataSet()
MyCommand.Fill(DS, "产品")
MyDataGrid.DataSource=DS.Tables("产品").DefaultView
MyDataGrid.DataBind()
End Sub
</script>
{
DataTable datatable = new DataTable();
int fieldCount = reader.FieldCount;
try
{
for (int i = 0; i < fieldCount; ++i)
{
datatable.Columns.Add(reader.GetName(i), reader.GetFieldType(i));
}
datatable.BeginLoadData();
object[] objValues = new object[fieldCount]; while (reader.Read())
{
reader.GetValues(objValues);
datatable.LoadDataRow(objValues, true);
}
reader.Close();
datatable.EndLoadData();
}
catch (Exception error)
{
System.Web.HttpContext.Current.Server.Transfer("Error.aspx?ErrorMessage=" + error);
}
return datatable;
}
伴水的代碼有點小筆誤,不過無傷大雅,測試通過,但速度比DataAdapter慢上一倍,實用性不強,不過我也隻是用來測試用的,隻是想做一系列綜合測試而已。現在問題是我同時提的:請問如何返回一個DataSet?
DataAdapter 内部也是这样实现的,只不过不采用object这类方法。
string就用GetString(int i),这样速度能提高10%左右。
DataSet是由DataTable组成的,难道你不知道?上面已经生成DataTable了……
{
//... DataTable dt = new DataTable();
dt.Columns.Add("ID", typeof(int));
dt.Columns.Add("Name", typeof(string)); //...
DataRow dr = null; while (rdr.Read())
{
dr = dt.NewRow();
dr["ID"] = rdr.GetInt32(0);
dr["Name"] = rdr.GetString(1);
//......
dt.Rows.Add(dr);
}
return dt;
}
Eri(NULL) ( ) ,那麼請問如何返回DataSet?----有DataTable了,还怕没有DataSet?
DataSet.Tables.Add(DataTable)
然后在返回这个DataSet就可以了。
是问.net类库里有没有现成的方法吧?根据上述应该是没有了,
那就是问怎么样搞性能更高咯?可见楼主问问题并没有描述清楚~~bs一下~~
{
int num;
IntPtr hScp;
PermissionSet set = new PermissionSet(PermissionState.None);
set.AddPermission(OleDbConnection.ExecutePermission);
set.AddPermission(new SecurityPermission(SecurityPermissionFlag.UnmanagedCode));
set.Demand();
Bid.ScopeEnter(out hScp, "<oledb.OleDbDataAdapter.Fill|API> %d#, dataTable, ADODBRecordSet\n", base.ObjectID);
try
{
if (dataTable == null)
{
throw ADP.ArgumentNull("dataTable");
}
if (ADODBRecordSet == null)
{
throw ADP.ArgumentNull("adodb");
}
num = this.FillFromADODB(dataTable, ADODBRecordSet, null, false);
}
finally
{
Bid.ScopeLeave(ref hScp);
}
return num;
} private int FillFromADODB(object data, object adodb, string srcTable, bool multipleResults)
{
string sourceTableName;
bool incrementResultCount;
bool flag = multipleResults;
Bid.Trace("<oledb.IUnknown.QueryInterface|API|OLEDB|ADODB> ADORecordsetConstruction\n");
UnsafeNativeMethods.ADORecordsetConstruction recordset = adodb as UnsafeNativeMethods.ADORecordsetConstruction;
UnsafeNativeMethods.ADORecordConstruction record = null;
if (recordset != null)
{
if (multipleResults)
{
Bid.Trace("<oledb.Recordset15.get_ActiveConnection|API|ADODB>\n");
if (((UnsafeNativeMethods.Recordset15) adodb).get_ActiveConnection() == null)
{
multipleResults = false;
}
}
}
else
{
Bid.Trace("<oledb.IUnknown.QueryInterface|API|OLEDB|ADODB> ADORecordConstruction\n");
record = adodb as UnsafeNativeMethods.ADORecordConstruction;
if (record != null)
{
multipleResults = false;
}
}
int num = 0;
if (recordset == null)
{
if (record == null)
{
throw ODB.Fill_NotADODB("adodb");
}
num = this.FillFromRecord(data, record, srcTable);
if (flag)
{
this.FillClose(false, record);
}
return num;
}
int index = 0;
object[] objArray = new object[1];
Label_0068:
sourceTableName = null;
if (data is DataSet)
{
sourceTableName = GetSourceTableName(srcTable, index);
}
num += this.FillFromRecordset(data, recordset, sourceTableName, out incrementResultCount);
if (multipleResults)
{
object ppiRs;
object recordsAffected;
objArray[0] = DBNull.Value;
Bid.Trace("<oledb.Recordset15.NextRecordset|API|ADODB>\n");
OleDbHResult result = ((UnsafeNativeMethods.Recordset15) adodb).NextRecordset(out recordsAffected, out ppiRs);
Bid.Trace("<oledb.Recordset15.NextRecordset|API|ADODB|RET> %08X{HRESULT}\n", result);
if (OleDbHResult.S_OK > result)
{
if (((OleDbHResult) (-2146825037)) != result)
{
UnsafeNativeMethods.IErrorInfo ppIErrorInfo = null;
UnsafeNativeMethods.GetErrorInfo(0, out ppIErrorInfo);
string message = string.Empty;
if (ppIErrorInfo != null)
{
ODB.GetErrorDescription(ppIErrorInfo, result, out message);
}
throw new COMException(message, (int) result);
}
}
else
{
adodb = ppiRs;
if (adodb != null)
{
Bid.Trace("<oledb.IUnknown.QueryInterface|API|OLEDB|ADODB> ADORecordsetConstruction\n");
recordset = (UnsafeNativeMethods.ADORecordsetConstruction) adodb;
if (incrementResultCount)
{
index++;
}
if (recordset != null)
{
goto Label_0068;
}
}
}
}
if ((recordset != null) && (flag || (adodb == null)))
{
this.FillClose(true, recordset);
}
return num;
}
DataSet.Tables.Add(DataTable)
然后在返回这个DataSet就可以了。請給出具體代碼,謝謝!