C# 在C中将SqlDataReader列值转换为json字符串
如果基于SQLDataReader读取的输出,字符串不是理想的,我希望输出一个字符串或其他可能的变量类型。我一直在玩while循环,while阅读器。阅读 我需要用json.net序列化一些东西 这是我当前的代码-它输出到调试日志,只是为了确保我成功地从数据库中读取C# 在C中将SqlDataReader列值转换为json字符串,c#,.net,json,ado.net,C#,.net,Json,Ado.net,如果基于SQLDataReader读取的输出,字符串不是理想的,我希望输出一个字符串或其他可能的变量类型。我一直在玩while循环,while阅读器。阅读 我需要用json.net序列化一些东西 这是我当前的代码-它输出到调试日志,只是为了确保我成功地从数据库中读取 protected void Page_Load(object sender, EventArgs e) { string connectionString = "Data Source =.\\SQLEX
protected void Page_Load(object sender, EventArgs e)
{
string connectionString = "Data Source =.\\SQLEXPRESS; Initial Catalog = TeamProject; Integrated Security = True; MultipleActiveResultSets = True";
string querystring = "RosterMake";
using (SqlConnection connection =
new SqlConnection(connectionString))
{
SqlCommand command = new SqlCommand(querystring, connection);
command.CommandType = CommandType.StoredProcedure;
try
{
connection.Open();
SqlDataReader reader = command.ExecuteReader();
while (reader.Read())
{
System.Diagnostics.Debug.WriteLine("\t{0}\t{1}\t{2}",
reader[0], reader[1], reader[2]);
// What do I put here to make the results something I can
// serialize with json.net???
}
reader.Close();
}
catch (Exception ex)
{
System.Diagnostics.Debug.WriteLine("oops");
}
}
}
}
提前谢谢 只需在SqlDataReader上使用GetString方法即可。你想要这样的东西:
string myString;
using (SqlDataReader rdr = command.ExecuteReader())
{
do
{
while (rdr.Read())
{
myString = rdr.GetString(0);
}
} while (rdr.NextResult());
}
[
{
"Name": "John", Age: 30, Sex: "M"
},
{
"Name": "Maria", Age: 28, Sex: "F"
}
]
注意,这只是盲目地读取字符串,直到什么都没有了。由您来正确地输入逻辑。只需在SqlDataReader上使用GetString方法即可。你想要这样的东西:
string myString;
using (SqlDataReader rdr = command.ExecuteReader())
{
do
{
while (rdr.Read())
{
myString = rdr.GetString(0);
}
} while (rdr.NextResult());
}
[
{
"Name": "John", Age: 30, Sex: "M"
},
{
"Name": "Maria", Age: 28, Sex: "F"
}
]
注意,这只是盲目地读取字符串,直到什么都没有了。由您来正确输入逻辑。您可以返回一个列表:
public List<EnEntity> methodname(string pParam1)
{
try
{
List<EnEntity> ListEntity = new List<EnEntity>();
SqlCommand cmd = new SqlCommand("sp_name", conexion);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add("@vParam", SqlDbType.VarChar).Value = pParam1;
SqlDataReader drd = cmd.ExecuteReader();
if (drd.HasRows)//!=null
{
int pos_iIndex = drd.GetOrdinal("iColumnaName");
while (drd.Read())
{
EnEntity oEnEntity = new EnEntity();
oEnEntity.iPropertie = drd.IsDBNull(pos_iIndex) ? 0 : drd.GetInt32(pos_iIndex);
ListEnEntity.Add(oEnEntity);
}
drd.Close();
}
return (ListEnEntity);
}
catch (Exception ex)
{
throw ex;
}
}
您可以返回一个列表:
public List<EnEntity> methodname(string pParam1)
{
try
{
List<EnEntity> ListEntity = new List<EnEntity>();
SqlCommand cmd = new SqlCommand("sp_name", conexion);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add("@vParam", SqlDbType.VarChar).Value = pParam1;
SqlDataReader drd = cmd.ExecuteReader();
if (drd.HasRows)//!=null
{
int pos_iIndex = drd.GetOrdinal("iColumnaName");
while (drd.Read())
{
EnEntity oEnEntity = new EnEntity();
oEnEntity.iPropertie = drd.IsDBNull(pos_iIndex) ? 0 : drd.GetInt32(pos_iIndex);
ListEnEntity.Add(oEnEntity);
}
drd.Close();
}
return (ListEnEntity);
}
catch (Exception ex)
{
throw ex;
}
}
您可以使用一个列表来保存这些值并将其序列化。Json将把它序列化为一个简单的Json。请参见代码示例和注释:
// define the list
var values = new List<Dictionary<string, object>>();
try
{
connection.Open();
// Use the using block to make sure you are disposing the dataReader object.
using (SqlDataReader reader = command.ExecuteReader())
{
do
{
while (reader.Read())
{
// define the dictionary
var fieldValues = new Dictionary<string, object>();
// fill up each column and values on the dictionary
for (int i = 0; i < reader.FieldCount; i++)
{
fieldValues.Add(reader.GetName(i), reader[i]);
}
// add the dictionary on the values list
values.Add(fieldValues);
}
} while (reader.NextResult()); // if you have multiple result sets on the Stored Procedure, use this. Otherwise you could remove the do/while loop and use just the while.
}
}
catch (Exception ex)
{
System.Diagnostics.Debug.WriteLine("oops");
}
您可以使用一个列表来保存这些值并将其序列化。Json将把它序列化为一个简单的Json。请参见代码示例和注释:
// define the list
var values = new List<Dictionary<string, object>>();
try
{
connection.Open();
// Use the using block to make sure you are disposing the dataReader object.
using (SqlDataReader reader = command.ExecuteReader())
{
do
{
while (reader.Read())
{
// define the dictionary
var fieldValues = new Dictionary<string, object>();
// fill up each column and values on the dictionary
for (int i = 0; i < reader.FieldCount; i++)
{
fieldValues.Add(reader.GetName(i), reader[i]);
}
// add the dictionary on the values list
values.Add(fieldValues);
}
} while (reader.NextResult()); // if you have multiple result sets on the Stored Procedure, use this. Otherwise you could remove the do/while loop and use just the while.
}
}
catch (Exception ex)
{
System.Diagnostics.Debug.WriteLine("oops");
}
将SqlDataReader转换为JSON很简单。要拥有的东西是Newtonsoft.Json;这里的图书馆就是一个例子
SqlDataReader rdr = cmd.ExecuteReader();
//sqlDatoToJson(rdr);
var datatable = new DataTable();
datatable.Load(rdr);
string JsonResponse = string.Empty;
JsonResponse = JsonConvert.SerializeObject(datatable);
System.Diagnostics.Debug.WriteLine("3");
System.Diagnostics.Debug.WriteLine(rdr);
con.Close();
return new JsonResult() { Data = JsonResponse,JsonRequestBehavior = JsonRequestBehavior.AllowGet };
将SqlDataReader转换为JSON很简单。要拥有的东西是Newtonsoft.Json;这里的图书馆就是一个例子
SqlDataReader rdr = cmd.ExecuteReader();
//sqlDatoToJson(rdr);
var datatable = new DataTable();
datatable.Load(rdr);
string JsonResponse = string.Empty;
JsonResponse = JsonConvert.SerializeObject(datatable);
System.Diagnostics.Debug.WriteLine("3");
System.Diagnostics.Debug.WriteLine(rdr);
con.Close();
return new JsonResult() { Data = JsonResponse,JsonRequestBehavior = JsonRequestBehavior.AllowGet };
和如果不使用sqldatareader,请使用SqlDataAdapter。填充一个DataTable,DataTable很容易转换为XML。这个问题与sqldatareader有什么关系?这不只是关于如何将字符串转换为json对象吗?您展示了很多代码,但实际上您需要一个json教程。Newtonsoft.json将帮助您,只需要创建一个表示所需json格式的类,然后用reader[i]填充列表values@TimSchmelter这里的问题是将其存储在我可以使用json.net访问的地方。除非您知道如何将SQLDataReader直接传递给json。。。我只是不知道最好的存储方式是什么,这样我以后可以序列化它。@KeltonCrouse:SqlDataReader读取来自数据库的数据,并给你一个对象。它有reader.GetString0之类的方法,可以为您提供正确的类型。但是您必须自己处理这个字符串,datareader没有自动性。但是您是否尝试过:JObject.Parsereader.GetString0?和。。如果不使用sqldatareader,请使用SqlDataAdapter。填充一个DataTable,DataTable很容易转换为XML。这个问题与sqldatareader有什么关系?这不只是关于如何将字符串转换为json对象吗?您展示了很多代码,但实际上您需要一个json教程。Newtonsoft.json将帮助您,只需要创建一个表示所需json格式的类,然后用reader[i]填充列表values@TimSchmelter这里的问题是将其存储在我可以使用json.net访问的地方。除非您知道如何将SQLDataReader直接传递给json。。。我只是不知道最好的存储方式是什么,这样我以后可以序列化它。@KeltonCrouse:SqlDataReader读取来自数据库的数据,并给你一个对象。它有reader.GetString0之类的方法,可以为您提供正确的类型。但是您必须自己处理这个字符串,datareader没有自动性。但是你试过这个:JObject.Parsereader.GetString0吗?如果所有变量和方法都用英语命名会更好,否则它们对那些不了解世界的人来说意味着一个谜,比如:ListarReporteSegunPeriodoFechai,我希望这对你有帮助如果所有变量和方法都用英语命名会更好,否则,对于那些不了解世界的人来说,这意味着一个谜,比如:ListarReporteSegunPeriodoFechai,我希望这能帮助你,如果记录集的形状不同,这是如何工作的,在多个记录集的情况下?因为它可以反序列化为一个列表。所以得到两个数组?字典是一种密钥对值数据结构。它将反序列化单个对象,如{name:'Charles',lastName:'Okwuagwu}。string`是项目名称,object是值。该值必须是object,因为它可以是字符串、数字等。。如果json上有一个列表,那么可以为许多对象定义一个列表。这就是为什么它有效。谢谢,我找到了另一个选择。我使用WriteStarray;和写达雷;界定每个下一个结果;在多个记录集的情况下,如果记录集的形状不同,这是如何工作的?因为它可以反序列化为一个列表。因此得到两个数组?字典是一种密钥对值数据结构。它将反序列化单个对象,如{name:'Charles',lastName:'Okwuagwu}。string`是项目名称,object是值。该值必须是object,因为它可以是字符串、数字等。。如果您在json上有一个列表,那么y
为许多对象定义一个列表。这就是为什么它有效。谢谢,我找到了另一个选择。我使用WriteStarray;和写达雷;界定每个下一个结果;分成不同的数组