首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从ExecuteReader返回数据

从ExecuteReader返回数据
EN

Stack Overflow用户
提问于 2017-11-23 08:39:49
回答 2查看 1.2K关注 0票数 0

我有一个从数据库中获取数据的问题,因为我是c#语言的新手。我认为ExecuteReader应该检索所有行。顺便说一句,我不能像访问对象一样访问数据。reader.GetString(0),它只返回数组对象的索引。

是否有来自c#的任何属性可以从数据库访问该行?

我在寻找解决这个问题的答案。我要用这笔钱来帮助你!

,这是我到目前为止拥有的代码:

代码语言:javascript
复制
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
using Npgsql;

namespace Sample.Controllers
{
    public class HomeController : Controller
    {
        public string Index()
        {
            var connString = "Host=localhost;Username=postgres;Password=123456;Database=dotnet_core_db";
            using (var conn = new NpgsqlConnection(connString))
            {
                conn.Open();
                // Retrieve all rows
                using (var cmd = new NpgsqlCommand("SELECT * FROM Persons", conn))
                using (var reader = cmd.ExecuteReader())
                while (reader.Read())
                {   
                    Console.WriteLine(reader.GetString(0));
                    Console.WriteLine(reader.GetString(1));
                    Console.WriteLine(reader.GetString(2));
                    Console.WriteLine(reader.GetString(3));
                    Console.WriteLine(reader.GetString(4));
                    ViewData["connString"] = connString;
                }


            }

            return connString;
        }

        public IActionResult Error()
        {
            ViewData["RequestId"] = Activity.Current?.Id ?? HttpContext.TraceIdentifier;
            return View();
        }
    }
}

期望结果

代码语言:javascript
复制
{
        {
            id: 92,
            name: "foo",
            last_name: "bar",
            address: "adress Of foo",
            city: "city of foo"
        },
        {
            id: 872,
            name: "foo1",
            last_name: "bar 2",
            address: "address of foo1",
            city: "city of foo1"
        }
    }
EN

回答 2

Stack Overflow用户

发布于 2017-11-23 08:50:29

数据检索没问题。你需要的是一个json写作包。考虑像json.net这样的库来简化工作。

代码语言:javascript
复制
StringBuilder sb = new StringBuilder();
StringWriter sw = new StringWriter(sb);
using (JsonWriter writer = new JsonTextWriter(sw))
{
    writer.Formatting = Formatting.Indented;
    while (dataReader.Read())
    {
        writer.WriteStartObject();
        for (int i = 0; i < dataReader.fieldCount; ++i)
        {
            writer.WritePropertyName(dataReader.GetName(i));
            writer.WriteValue(dataReader.GetValue(i).ToString());
        }
        writer.WriteEndObject();
    }
}

fileWriter.Write(sb.ToString());
票数 0
EN

Stack Overflow用户

发布于 2017-11-23 09:02:19

你可以像在下面那样做

代码语言:javascript
复制
 using (var cmd = new NpgsqlCommand("SELECT * FROM Persons", conn))
 {
 using (var reader = cmd.ExecuteReader())
 {
     var columns = new List<string>();
     for(int i=0;i<reader.FieldCount;i++)
        columns.Add(reader.GetName(i));

    JsonArrayCollection jsonArray = new JsonArrayCollection();
     while (reader.Read())
    {   
        JsonObjectCollection jsonObject = new JsonObjectCollection();
        for(string columnName in columns)
            jsonObject.Add(new JsonStringValue(columnName, reader[columnName]));
        jsonArray.Add(jsonObject);
    }
 }
}

用记事本写的,所以请原谅任何编译错误。

注意:您可以使用任何json库,只有语法才会改变。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47450953

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档