C#MySQL查询结果Visual Studio

问题描述 投票:-1回答:2
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无效回传问题。

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

例:

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

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

以这种方式使用它。

你能在功能上做出必要的修正吗?

c# mysql arrays arraylist
2个回答
0
投票

我建议首先改变你的阻止块。

  1. 你应该抛出异常,理想情况下有更多的信息。
  2. 我还建议你有一个MySqlParameters的可选列表(默认为null),虽然这里没有明显的,因为没有参数,你可能更容易拥有SQL注入可疑的SQL。在大多数情况下,如果你有一个where块而且它不是null,你就做错了。
  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(); } } } }

0
投票

我自己解决了这个问题

我写了一个新功能

  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());
© www.soinside.com 2019 - 2024. All rights reserved.