【问题标题】:MySQL and C# Getting data from DB and creating an associative array/objectMySQL 和 C# 从 DB 获取数据并创建关联数组/对象
【发布时间】:2015-07-15 17:14:21
【问题描述】:

我是 C# 新手,多年来一直在使用 PHP。

我面临的问题是我想创建一个方法/函数,它将“sql 查询”作为参数并返回检索到的任何数据,以便可以使用 key/index/column_name 使用它。

我所取得的成就

我已经实现的是我能够通过索引在同一个函数中访问数据。 但我不知道没有。将返回的列数,因此我无法将其存储在数组中。

代码

        string ConnectionString = ConfigurationManager.ConnectionStrings["sqlcon"].ConnectionString;
        MySqlConnection db;
        db = new MySql.Data.MySqlClient.MySqlConnection(ConnectionString);
        try
        {
            db.Open();
            MySqlCommand cmd = new MySqlCommand();
            cmd.Connection = db;
            cmd.CommandText = sql;
            MySqlDataReader rdr = cmd.ExecuteReader();
            while (rdr.Read())
            {
                Console.WriteLine(rdr['areaId'].toString());
            }
            db.Close();
            return true;
        }

问题
1.我不知道Columns的数量。
2. 我无法访问索引或列名。

我想创建一个关联的数据数组,列名作为索引,数据作为它的数据

编辑
我正在尝试使用 WPF 和 MySQL 数据库在 C# 上构建应用程序。

【问题讨论】:

  • 列数还是行数?
  • 以上都不知道

标签: c# mysql arrays


【解决方案1】:

我的第一个建议是使用一个微型 ORM,例如 Dapper.net

这可以通过 nuget 获取。如果您希望从一个表或多个表中检索未知的数据数组,您可以将其提取到 ExpandoObject 中,然后对其进行枚举。在 ExpandoObject 上循环的示例可以是 found here

    public Foo FetchSomeData(string query)
    {
        using (var cn = Connection)
        {
            var result = cn.Query(query);
           //do something with result, and return it
           return new Foo(result);
        }
    }

我担心将原始 sql 传递到数据库而不至少检查它或使用参数,因为这可能是一个重大的安全风险,特别是如果您允许用户生成查询并且您没有先审查它。

【讨论】:

  • 如果不进行规范化、检查和全部检查,我不会通过查询。正如我所说,我是 PHP 开发人员,所以我知道这些安全问题。无论如何,谢谢如果没有微型 ORM(研究它)我不能做到这一点,那么我会使用它
  • 您好 Rohit,您可以绕过 micro orm,只需使用 Data Reader .Read() 使用 .GetName() 和 .GetString() 传入列和数据,在飞。使用 micro orm 简单地消除了编写此类代码的需要。
  • 这很有用。感谢您的帮助
猜你喜欢
  • 1970-01-01
  • 2020-12-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-11-18
  • 2017-05-28
  • 2014-10-23
  • 2014-04-13
相关资源
最近更新 更多