我正在使用SQLdatareader从数据库构建POCO.代码工作,除非它在数据库中遇到空值.例如,如果数据库中的FirstName列包含空值,则抛出异常.
employee.FirstName = sqlreader.GetString(indexFirstName);
Run Code Online (Sandbox Code Playgroud)
在这种情况下处理空值的最佳方法是什么?
连接到数据库后,我可以获取在我的所有列中返回的列的名称SqlDataReader吗?
如何检查SqlDataReader对象中是否存在列?在我的数据访问层中,我创建了一个方法,为多个存储过程调用构建相同的对象.其中一个存储过程具有另一个列,其他存储过程不使用该列.我想修改方法以适应每个场景.
我的应用程序是用C#编写的.
我有一个SQL Server 2008数据库,我正在后端工作.我正在研究asp.net/C#
SqlDataReader rdr = cmd.ExecuteReader();
while (rdr.Read())
{
//how do I read strings here????
}
Run Code Online (Sandbox Code Playgroud)
我知道读者有价值观.我的SQL命令是从表中只选择1列.该列仅包含字符串.我想逐一阅读阅读器中的字符串(行).我该怎么做呢?
我的问题是如何SqlDataReader在C#中获取查询返回的行数.我已经看到了一些关于此的答案,但没有明确定义,除了一个声明用Read()方法做一个while循环并增加一个计数器.
我的问题是我试图填充一个多维数组,第一行是列标题名称,后面的每一行都是行数据.
我知道我可以将这些东西转储到List控件中而不用担心它,但是对于我自己的个人启发,我还想在我选择的时候将数据拉入和拉出阵列,并以不同的格式显示它.
所以我认为我不能这样做Read()然后增加++方式,因为这意味着我必须打开Read()然后Read()再次打开以获得行数然后列数据.
只是我正在谈论的一个小例子:
int counter = 0;
while (sqlRead.Read())
{
//get rows
counter++
}
Run Code Online (Sandbox Code Playgroud)
然后一个for循环运行列和弹出
something.Read();
int dbFields = sqlRead.FieldCount;
for (int i = 0; i < dbFields; i++)
{
// do stuff to array
}
Run Code Online (Sandbox Code Playgroud) 我有一个datareader从sql server数据库返回一个lsit记录.我在数据库中有一个名为"Additional"的字段.此字段为空或空的50%.
我正在尝试编写检查此字段是否为空的代码.这背后的逻辑是:如果字段"附加"包含文本,则显示信息,否则隐藏字段.
我试过了:
if (myReader["Additional"] != null)
{
ltlAdditional.Text = "contains data";
}
else
{
ltlAdditional.Text = "is null";
}
Run Code Online (Sandbox Code Playgroud)
上面的代码给了我这个错误:
异常详细信息:System.IndexOutOfRangeException:Additional
任何帮助将不胜感激...
我通常使用,DataSet因为它非常灵活.最近我被分配了代码优化任务,为了减少对数据库的命中,我在一个程序中更改了两个查询.一个Query返回count,另一个返回actual data.也就是说,My stored procedure返回两个表.现在,我知道如何使用读取两个表DataSets,但我需要使用读取两个表DataReader.寻找我发现了这个.
我按照文章编写了这样的代码:
dr = cmd.ExecuteReader();
while (dr.Read())
{
}
if (dr.NextResult()) // this line throws exception
{
while (dr.Read())
{
Run Code Online (Sandbox Code Playgroud)
但是我在dt.NextResult上得到了一个例外.例外情况是:
Invalid attempt to call NextResult when reader is closed.
Run Code Online (Sandbox Code Playgroud)
我也试图谷歌上面的错误,但仍然无法解决问题.任何帮助都感激不尽.我需要使用多个表读取datareader,这可能吗?
Dapper dot net有一个buffer参数(bool),但据我所知,它唯一能做的就是在返回之前将结果转换为列表.
根据文件:
Dapper的默认行为是执行你的sql并在返回时缓冲整个读者.在大多数情况下,这是理想的,因为它最大限度地减少了数据库中的共享锁,并减少了数据库网络时间.
但是,在执行大量查询时,您可能需要最小化内存占用并仅根据需要加载对象.为此,在Query方法中传递,缓冲:false.
我不确定如何将结果转换为列表来实现此目的.我错过了什么吗?我唯一的想法是它应该设置CommandBehavior为ExecuteReaderto CommandBehavior.SequentialAccess(但它没有).
我需要使用C#将SqlServer上的表中的一列字符串加载到内存中的Array中.有没有比打开SqlDataReader更快的方法并循环它.表很大,时间很关键.
编辑我正在尝试构建.dll并在服务器上使用它来进行数据库上的某些操作.但现在要放慢速度.如果这比我重新设计数据库要快.我很难有可能有一些解决方案如何加快速度.
public string toJSON(SqlDataReader o)
{
StringBuilder s = new StringBuilder();
s.Append("[");
if (o.HasRows)
while (o.Read())
s.Append("{" + '"' + "Id" + '"' + ":" + o["Id"] + ", "
+ '"' + "CN" + '"' + ":" + o["CatName"] + ", "
+ '"' + "Ord" + '"' + ":" + o["Ord"] + ","
+ '"' + "Icon" + '"' + ":" + o["Icon"] + "}, ");
s.Remove(s.Length - 2, 2);
s.Append("]");
o.Close();
return s.ToString();
}
Run Code Online (Sandbox Code Playgroud)
我在这里使用我自己的函数进行序列化.我需要知道这是一个好方法还是我应该使用另一个.顺便说一下,我试过使用JavaScriptSerializer但是这不适用于SqlDataReader.感谢名单
sqldatareader ×10
c# ×9
.net ×3
ado.net ×2
asp.net ×2
dapper ×1
datareader ×1
json ×1
null ×1
sql ×1
sql-server ×1