我在一个存储过程中有两个select语句,并在数据读取器中获取结果集。我的目标是将两个select语句中的数据合并到一个JSON字符串中。
我正在使用嵌套的do while,在while结束时,我收到一个错误
第一个月
下面是代码:
try
{
con.Open();
cmd.CommandType = CommandType.StoredProcedure;
cmd.CommandText = "SPWorkMetaData";
rd = cmd.ExecuteReader();
List<Dictionary<String, Object>> tableRow = new List<Dictionary<string, object>>();
List<Dictionary<String, Object>> tableRow1 = new List<Dictionary<string, object>>();
Dictionary<String, Object> rows;
if (rd.HasRows)
{
do
{
dt = new DataTable();
dt.Load(rd);
foreach (DataRow dr in dt.Rows)
{
rows = new Dictionary<string, object>();
int i = 1;
foreach (DataColumn col in dt.Columns)
{
rows.Add(col.ColumnName, dr[col].ToString());
i = i + 1;
}
tableRow.Add(rows);
status = "true";
}
retvalue = serializer.Serialize(tableRow).ToString();
//response = "{\"status\":\"" + status + "\",\"data\":" + retvalue + "}";
do
{
DataTable dt1 = new DataTable();
dt1.Load(rd);
foreach (DataRow dr in dt1.Rows)
{
Dictionary<String, Object> rows1 = new Dictionary<String, Object>();
int i = 1;
foreach (DataColumn col in dt1.Columns)
{
rows1.Add(col.ColumnName, dr[col].ToString());
i = i + 1;
}
tableRow1.Add(rows1);
status = "true";
}
retvalue = serializer.Serialize(tableRow).ToString() + serializer.Serialize(tableRow1).ToString();
response = "{\"status\":\"" + status + "\",\"data\":" + retvalue + "}";
}
while (rd.Read());
}
while (rd.NextResult()) ;
}
}
这个错误是否意味着SQL连接被关闭,如果是,那么它提到我只在finally块中关闭连接。
需要了解这一点,敬请提供一些指导。
谢谢。
1条答案
按热度按时间qxsslcnc1#
那么,您没有注意到返回的两个表是否是相同的数据结构吗?
这就引出了一个问题:为什么不使用联合查询?
我也不认为(怀疑)你想序列化一个数据行,因为一个数据行有“额外”的东西,如行脏了(被更改)和相当多的“额外”属性,我怀疑你想成为客户端的json结果的一部分。
因此,让我们提取这两个表(并忽略为什么这里不使用联合查询!!!)。
但是,假设我有两个表:tblHotels和People --它们都有FirstName、lastname列。
因此,从理论上讲,如果我们要得到一个“合理的”JSON字符串,就需要一个干净的数据结构。
因此,我建议使用以下代码: