连接到数据库后,我可以获取在我的所有列中返回的列的名称SqlDataReader吗?
Type t = typeof(int?); //will get this dynamically
object val = 5; //will get this dynamically
object nVal = Convert.ChangeType(val, t);//getting exception here
Run Code Online (Sandbox Code Playgroud)
我在上面的代码中得到了InvalidCastException.对于上面我可以简单地写int? nVal = val,但上面的代码是动态执行.
我得到一个包含在一个对象(这里是val)中的值(非可空类型,如int,float等),我必须通过将它转换为另一个类型(可以是或不可以为空的版本)将其保存到另一个对象它).什么时候
从'System.Int32'到'System.Nullable`1 [[System.Int32,mscorlib,Version = 4.0.0.0,Culture = neutral,PublicKeyToken = b77a5c561934e089]]'的无效演员表.
一个int,应该是可兑换的/可浇铸的nullable int,这里有什么问题?
我正在使用第三方库来返回数据阅读器.我想要一个简单的方法,并尽可能通用将其转换为对象列表.
例如,假设我有一个具有2个属性EmployeeId和Name的类'Employee',我希望将数据读取器(包含员工列表)转换为List <Employee>.
我想我别无选择,只能迭代数据阅读器的各行,并为每一行将它们转换为我将添加到List的Employee对象.更好的解决方案?我正在使用C#3.5,理想情况下我希望它尽可能通用,以便它适用于任何类(DataReader中的字段名称与各种对象的属性名称匹配).
我在SQL Server中有一个存储过程,它接受用户定义的表类型.我正在按照这篇文章的答案从C#list批量插入SQL Server到多个表,其中包含有关如何将DataTable发送到SQL中的存储过程的外键重量.
但是当我创建时,DataTable table = new DataTable();我得到了一个错误DataTable does not contain a constructor that takes 0 arguments.
我发现这个https://github.com/VahidN/EPPlus.Core/issues/4基本上说DataTable在.NET Core中不再支持.那么现在怎么办?如何创建DataTable(或者它的替代品是什么)?如何将用户定义的表类型发送到.NET Core上的SQL Server?
我使用SP,这不是SP vs代码隐藏"构建您的SQL命令"问题.我正在寻找一种处理许多小事务的后端应用程序的高吞吐量方法.我使用SQLDataReader进行大部分返回,因为转发仅适用于大多数情况.
我已经看到它做了很多种方式,并且我自己也使用了大部分方法.
定义和接受存储过程参数作为参数本身的方法,并使用cmd.Parameters.Add构建(使用或不指定DB值类型和/或长度)
将SP参数及其值组装到数组或散列表中,然后传递给一个更抽象的方法来解析集合,然后运行cmd.Parameters.Add
表示表的类,根据需要初始化类,设置表示表字段的公共属性,以及调用Save,Load等方法
我确信还有其他我见过但现在也想不到的.我对所有建议持开放态度.
哪个会更快.
1)循环datareader并基于填充的数据表创建自定义行和列
2)或者创建一个dataAdapter对象并且只是(填充)一个数据表.
在动态创建数据表时,数据加载器的性能是否仍然适用?
我想返回将存储sqldatareader值的列表.我怎样才能做到这一点..
最近我发现自己编写数据访问层选择方法,其中代码都采用这种通用形式:
public static DataTable GetSomeData( ... arguments)
{
string sql = " ... sql string here: often it's just a stored procedure name ... ";
DataTable result = new DataTable();
// GetOpenConnection() is a private method in the class:
// it manages the connection string and returns an open and ready connection
using (SqlConnection cn = GetOpenConnection())
using (SqlCommand cmd = new SqlCommand(sql, cn))
{
// could be any number of parameters, each with a different type
cmd.Parameters.Add("@Param1", SqlDbType.VarChar, 50).Value …Run Code Online (Sandbox Code Playgroud) 前言:
我正在将DbDataReader映射到实体并具有一些基准:
[0] retrieved 159180 records in 45135 ms
[1] retrieved 159180 records in 45008 ms
[2] retrieved 159180 records in 44814 ms
[3] retrieved 159180 records in 44987 ms
[4] retrieved 159180 records in 44914 ms
[5] retrieved 159180 records in 45224 ms
[6] retrieved 159180 records in 45829 ms
[7] retrieved 159180 records in 60762 ms
[8] retrieved 159180 records in 52128 ms
[9] retrieved 159180 records in 47982 ms
Run Code Online (Sandbox Code Playgroud)
考虑到从Sql Server Management Studio查询只需要17秒,这是一个非常大的时间和极差.我的选择声明:
"SELECT*FROM tbl_MyTable" …
我经历了如何轻松地将DataReader转换为List <T>?
我希望在上面的链接中实现类似于接受的内容.
Scenrio:
我正在使用OdbcDataReader从数据库中检索.
我有一个模型类.仅供参考,此类的属性是数据库中列名的精确副本.我需要将这些列映射到属性并返回List这可以使用Automapper完成.
c# ×8
.net ×4
datareader ×3
ado.net ×2
datatable ×2
.net-2.0 ×1
.net-core ×1
asp.net ×1
asp.net-core ×1
automapper ×1
casting ×1
dataadapter ×1
list ×1
nullable ×1
performance ×1
reflection ×1
sql-server ×1