mirror of
https://gitee.com/dotnetchina/SqlSugar.git
synced 2025-09-19 18:22:23 +08:00
Update mongodb
This commit is contained in:
@@ -78,30 +78,38 @@ namespace MongoDb.Ado.data
|
|||||||
var rows = dt.Rows;
|
var rows = dt.Rows;
|
||||||
using (DbDataReader dr = command.ExecuteReader())
|
using (DbDataReader dr = command.ExecuteReader())
|
||||||
{
|
{
|
||||||
for (int i = 0; i < dr.FieldCount; i++)
|
if (dr.Read())
|
||||||
{
|
{
|
||||||
string name = dr.GetName(i).Trim();
|
for (int i = 0; i < dr.FieldCount; i++)
|
||||||
if (!columns.Contains(name))
|
|
||||||
columns.Add(new DataColumn(name, dr.GetFieldType(i)));
|
|
||||||
else
|
|
||||||
{
|
{
|
||||||
columns.Add(new DataColumn(name + i, dr.GetFieldType(i)));
|
string name = dr.GetName(i).Trim();
|
||||||
|
if (!columns.Contains(name))
|
||||||
|
columns.Add(new DataColumn(name, dr.GetFieldType(i)));
|
||||||
|
else
|
||||||
|
{
|
||||||
|
columns.Add(new DataColumn(name + i, dr.GetFieldType(i)));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
AddRow(dt, columns, dr);
|
||||||
|
while (dr.Read())
|
||||||
while (dr.Read())
|
|
||||||
{
|
|
||||||
DataRow daRow = dt.NewRow();
|
|
||||||
for (int i = 0; i < columns.Count; i++)
|
|
||||||
{
|
{
|
||||||
daRow[columns[i].ColumnName] = dr.GetValue(i);
|
AddRow(dt, columns, dr);
|
||||||
}
|
}
|
||||||
dt.Rows.Add(daRow);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
dt.AcceptChanges();
|
dt.AcceptChanges();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static void AddRow(DataTable dt, DataColumnCollection columns, DbDataReader dr)
|
||||||
|
{
|
||||||
|
DataRow daRow = dt.NewRow();
|
||||||
|
for (int i = 0; i < columns.Count; i++)
|
||||||
|
{
|
||||||
|
daRow[columns[i].ColumnName] = dr.GetValue(i);
|
||||||
|
}
|
||||||
|
dt.Rows.Add(daRow);
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Fill
|
/// Fill
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@@ -112,13 +120,13 @@ namespace MongoDb.Ado.data
|
|||||||
{
|
{
|
||||||
ds = new DataSet();
|
ds = new DataSet();
|
||||||
}
|
}
|
||||||
|
var dt = new DataTable();
|
||||||
using (DbDataReader dr = command.ExecuteReader())
|
using (DbDataReader dr = command.ExecuteReader())
|
||||||
{
|
{
|
||||||
do
|
var columns = dt.Columns;
|
||||||
|
var rows = dt.Rows;
|
||||||
|
if (dr.Read())
|
||||||
{
|
{
|
||||||
var dt = new DataTable();
|
|
||||||
var columns = dt.Columns;
|
|
||||||
var rows = dt.Rows;
|
|
||||||
for (int i = 0; i < dr.FieldCount; i++)
|
for (int i = 0; i < dr.FieldCount; i++)
|
||||||
{
|
{
|
||||||
string name = dr.GetName(i).Trim();
|
string name = dr.GetName(i).Trim();
|
||||||
@@ -129,19 +137,13 @@ namespace MongoDb.Ado.data
|
|||||||
columns.Add(new DataColumn(name + i, dr.GetFieldType(i)));
|
columns.Add(new DataColumn(name + i, dr.GetFieldType(i)));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
AddRow(dt, columns, dr);
|
||||||
while (dr.Read())
|
while (dr.Read())
|
||||||
{
|
{
|
||||||
DataRow daRow = dt.NewRow();
|
AddRow(dt, columns, dr);
|
||||||
for (int i = 0; i < columns.Count; i++)
|
|
||||||
{
|
|
||||||
daRow[columns[i].ColumnName] = dr.GetValue(i);
|
|
||||||
}
|
|
||||||
dt.Rows.Add(daRow);
|
|
||||||
}
|
}
|
||||||
dt.AcceptChanges();
|
}
|
||||||
ds.Tables.Add(dt);
|
ds.Tables.Add(dt);
|
||||||
} while (dr.NextResult());
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -13,36 +13,9 @@ namespace MongoDb.Ado.data
|
|||||||
{
|
{
|
||||||
private readonly IEnumerator<BsonDocument> _enumerator;
|
private readonly IEnumerator<BsonDocument> _enumerator;
|
||||||
private BsonDocument _current;
|
private BsonDocument _current;
|
||||||
private List<string> _fieldNames;
|
|
||||||
private List<Type> _fieldTypes;
|
|
||||||
public MongoDbBsonDocumentDataReader(IEnumerable<BsonDocument> documents)
|
public MongoDbBsonDocumentDataReader(IEnumerable<BsonDocument> documents)
|
||||||
{
|
{
|
||||||
var docList = documents.Take(1).ToList();
|
_enumerator = documents.GetEnumerator();
|
||||||
_enumerator = docList.GetEnumerator();
|
|
||||||
if (docList.Any()==true)
|
|
||||||
{
|
|
||||||
_fieldNames = docList.SelectMany(d => d.Names).Distinct(StringComparer.OrdinalIgnoreCase).ToList();
|
|
||||||
_fieldTypes = new List<Type>();
|
|
||||||
foreach (var fieldName in _fieldNames)
|
|
||||||
{
|
|
||||||
Type fieldType = typeof(object); // 默认类型
|
|
||||||
|
|
||||||
foreach (var doc in docList)
|
|
||||||
{
|
|
||||||
if (doc.TryGetValue(fieldName, out var value) && value != BsonNull.Value)
|
|
||||||
{
|
|
||||||
fieldType = BsonTypeMapper.MapToDotNetValue(value)?.GetType() ?? typeof(object);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
_fieldTypes.Add(fieldType);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
_fieldNames = new List<string>();
|
|
||||||
_fieldTypes = new List<Type>();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public override bool Read()
|
public override bool Read()
|
||||||
@@ -55,7 +28,7 @@ namespace MongoDb.Ado.data
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
public override int FieldCount => _fieldNames.Count;
|
public override int FieldCount => _current?.Count()??0;
|
||||||
|
|
||||||
public override int Depth => throw new NotImplementedException();
|
public override int Depth => throw new NotImplementedException();
|
||||||
|
|
||||||
@@ -77,7 +50,12 @@ namespace MongoDb.Ado.data
|
|||||||
public override DateTime GetDateTime(int ordinal) => (DateTime)GetValue(ordinal);
|
public override DateTime GetDateTime(int ordinal) => (DateTime)GetValue(ordinal);
|
||||||
public override decimal GetDecimal(int ordinal) => (decimal)GetValue(ordinal);
|
public override decimal GetDecimal(int ordinal) => (decimal)GetValue(ordinal);
|
||||||
public override double GetDouble(int ordinal) => (double)GetValue(ordinal);
|
public override double GetDouble(int ordinal) => (double)GetValue(ordinal);
|
||||||
public override Type GetFieldType(int ordinal) => _fieldTypes[ordinal] ?? typeof(object);
|
public override Type GetFieldType(int ordinal)
|
||||||
|
{
|
||||||
|
var obj = GetValue(ordinal);
|
||||||
|
if (obj == null) return typeof(object);
|
||||||
|
return obj.GetType();
|
||||||
|
}
|
||||||
public override float GetFloat(int ordinal) => (float)GetValue(ordinal);
|
public override float GetFloat(int ordinal) => (float)GetValue(ordinal);
|
||||||
public override Guid GetGuid(int ordinal) => (Guid)GetValue(ordinal);
|
public override Guid GetGuid(int ordinal) => (Guid)GetValue(ordinal);
|
||||||
public override short GetInt16(int ordinal) => (short)GetValue(ordinal);
|
public override short GetInt16(int ordinal) => (short)GetValue(ordinal);
|
||||||
@@ -102,9 +80,18 @@ namespace MongoDb.Ado.data
|
|||||||
|
|
||||||
public override string GetName(int ordinal)
|
public override string GetName(int ordinal)
|
||||||
{
|
{
|
||||||
if (ordinal < 0 || ordinal >= _fieldNames.Count)
|
if (_current == null)
|
||||||
|
throw new InvalidOperationException("No current document.");
|
||||||
|
|
||||||
|
// 获取当前文档的字段元素列表(Elements)
|
||||||
|
var elements = _current.Elements.ToList();
|
||||||
|
|
||||||
|
// 确保 ordinal 是有效的索引
|
||||||
|
if (ordinal < 0 || ordinal >= elements.Count)
|
||||||
throw new IndexOutOfRangeException($"Invalid ordinal: {ordinal}");
|
throw new IndexOutOfRangeException($"Invalid ordinal: {ordinal}");
|
||||||
return _fieldNames[ordinal];
|
|
||||||
|
// 返回对应索引的字段名
|
||||||
|
return elements[ordinal].Name;
|
||||||
}
|
}
|
||||||
|
|
||||||
public override int GetOrdinal(string name)
|
public override int GetOrdinal(string name)
|
||||||
|
@@ -119,6 +119,7 @@ namespace MongoDbTest
|
|||||||
|
|
||||||
private static void DataTableTest()
|
private static void DataTableTest()
|
||||||
{
|
{
|
||||||
|
//datatable
|
||||||
{
|
{
|
||||||
var connection = new MongoDbConnection(DbHelper.SqlSugarConnectionString);
|
var connection = new MongoDbConnection(DbHelper.SqlSugarConnectionString);
|
||||||
connection.Open();
|
connection.Open();
|
||||||
@@ -130,6 +131,18 @@ namespace MongoDbTest
|
|||||||
mongoDbDataAdapter.Fill(dt);
|
mongoDbDataAdapter.Fill(dt);
|
||||||
connection.Close();
|
connection.Close();
|
||||||
}
|
}
|
||||||
|
//dataset
|
||||||
|
{
|
||||||
|
var connection = new MongoDbConnection(DbHelper.SqlSugarConnectionString);
|
||||||
|
connection.Open();
|
||||||
|
////SELECT * FROM b ORDER BY age DESC OFFSET 1 ROWS FETCH NEXT 2 ROWS ONLY;
|
||||||
|
MongoDbCommand mongoDbCommand = new MongoDbCommand(" aggregate b [\r\n { \"$sort\": { \"age\": -1 } },\r\n { \"$skip\": 1 },\r\n { \"$limit\": 2 }\r\n] ]", connection);
|
||||||
|
MongoDbDataAdapter mongoDbDataAdapter = new MongoDbDataAdapter();
|
||||||
|
mongoDbDataAdapter.SelectCommand = mongoDbCommand;
|
||||||
|
DataSet ds = new DataSet();
|
||||||
|
mongoDbDataAdapter.Fill(ds);
|
||||||
|
connection.Close();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
private static void ExecuteScalarTest()
|
private static void ExecuteScalarTest()
|
||||||
{
|
{
|
||||||
|
Reference in New Issue
Block a user