【问题标题】:C# MySQL query result Visual StudioC# MySQL 查询结果 Visual Studio
【发布时间】:2018-01-20 15:36:06
【问题描述】:
public ArrayList P2a(string sql)
{
    ArrayList result = new ArrayList();

    MySqlCommand cmd = new MySqlCommand();
    MySqlConnection mysqlconnection = new MySqlConnection(xxx);
    cmd.Connection = mysqlconnection;
    cmd.CommandText = sql;
    try
    {
        cmd.Connection.Open();
        MySqlDataReader reader = cmd.ExecuteReader();
        while (reader.Read())
        {
            Dictionary<string, object> dict = new Dictionary<string, object>();
            for (int count = 0; (count <= (reader.FieldCount - 1)); count++)
            {
                dict.Add(reader.GetName(count), reader[count]);
            }
                result.Add(dict);
        }

        return result;
    } catch {
        return result;
    } finally {
        cmd.Connection.Close();
    }
}

C# Visual Studio 2017 MySQL void 返回回显问题。

我想确保正确打印出结果。

例子:

ArrayList query = P2a("select id,site,comment from sites");

MessageBox.Show(query[0]["site"].toString());

以这种方式使用它。

你能在函数中进行必要的更正吗?

【问题讨论】:

  • 您在使用该代码时遇到了什么问题?有没有调试过代码检查有没有异常?

标签: c# mysql arrays arraylist


【解决方案1】:

我建议您首先更改您的 catch 块。

  1. 您应该抛出异常,最好提供更多信息。
  2. 我还建议你有一个可选的 MySqlParameters 列表(默认为 null),虽然这里不明显,因为没有参数,你很可能有 SQL 注入可疑的 SQL。在大多数情况下,如果你有一个 where 块并且它不为空,那么你做错了。
  3. 您的代码不会清理一次性对象,因此使用会解决这个问题。
  4. 使用泛型代替,因为列表项现在将成为字典。

    public List<Dictionary<String, object>> P2a(string sql, MySqlParameter[] parameters)
    {
        List<Dictionary<String, object>> result = new List<Dictionary<String, object>>();
    
        using (MySqlCommand cmd = new MySqlCommand())
        {
            using (MySqlConnection mysqlconnection = new MySqlConnection(xxx))
            {
                cmd.Connection = mysqlconnection;
                cmd.CommandText = sql;
    
                if (parameters != null)
                {
                    foreach (MySqlParameter p in parameters)
                    {
                        cmd.Parameters.Add(p);
                    }
                }
    
                try
                {
                    cmd.Connection.Open();
                    using (MySqlDataReader reader = cmd.ExecuteReader())
                    {
                        while (reader.Read())
                        {
                            Dictionary<string, object> dict = new Dictionary<string, object>();
                            for (int count = 0; (count <= (reader.FieldCount - 1)); count++)
                            {
                                dict.Add(reader.GetName(count), reader[count]);
                            }
                            result.Add(dict);
                        }
                    }
    
                    return result;
                }
                catch (ApplicationException ex)
                {
                    throw new ApplicationException("Error Executing " + sql, ex);
                }
                finally
                {
                    cmd.Connection.Close();
                }
            }
        }
    }
    

【讨论】:

  • 从 MySQL 数据库中查询可以传输 php 之类的变量 你能创建一个函数吗?
  • 这是一个与所问问题不同的问题...如果答案可以接受...请接受并单独发布问题
【解决方案2】:

我自己解决了问题

我写了一个新函数

  public DataTable query(string sql) {

            DataTable table = new DataTable();
            MySqlConnection connection = null;
            MySqlDataReader reader = null;

            try {
                connection = new MySqlConnection(xxx);
                connection.Open();
                MySqlDataAdapter dataAdapter = new MySqlDataAdapter();
                dataAdapter.SelectCommand = new MySqlCommand(sql, connection);
                dataAdapter.Fill(table);

                return table;
            } catch {
                return table;
            } finally {

                if (reader != null)
                    reader.Close();
                if (connection != null)
                    connection.Close();
            }}

停用

DataTable list = query("select * from tablename");

MessageBox.Show(list.Rows["rowsname"]["cellname"].ToString());

【讨论】:

    猜你喜欢
    • 2016-03-05
    • 1970-01-01
    • 1970-01-01
    • 2011-07-06
    • 1970-01-01
    • 2020-06-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-31
    相关资源
    最近更新 更多