c# - 变量未声明或从未分配?和数据读取器不工作?

标签 c# mysql database debugging crash

我不想发布这个,但我找不到解决这个问题的答案。

我正在为 friend 制作应用程序,但是当我运行它时,它给了我一个警告,并且最近开始崩溃。

我试着调试这个问题,它给了我一个完全不同的问题。

class DBApplication : DBInfo
{
    private MySqlConnection connection = new MySqlConnection();
    private int customer_id;
    public string lastname;

    //constructor
    public DBApplication()
    {
        OrderID();
    }

    public string OrderID()
    {
        customer_id = 8;
        //add the DataBase query to the string.
        string query = "SELECT * FROM wdb_customer WHERE=" + customer_id;

        if (OpenConnection() == true)
        {
            MySqlCommand myComm = connection.CreateCommand();
            MySqlDataReader Reader;
            myComm.CommandText = query;
            /*when I debugged, it said this was the problem? 
              but i dont understand why.*/*
            Reader = myComm.ExecuteReader(); 

            while (Reader.Read())
            {
                lastname = Reader["customer_name"].ToString();
            }
            Reader.Close();
        }
        return lastname;
    }
}

第一个问题“变量 DB_App 未声明或从未分配。”

来自这个脚本。

partial class Form1 {
    ...
    private DBApplication DB_App = new DBApplication();
    ...
    private void InitializeComponent()
    {
       this.OrderID.Text = DB_App.lastname;
    }

我也尝试过 DB_App.OrderID();同样的问题。

最佳答案

您的查询无效,因为您在 WHERE 子句中遗漏了一个列名

应用快速修复更改

string query = "SELECT * FROM wdb_customer WHERE=" + customer_id;

string query = "SELECT * FROM wdb_customer WHERE customer_id = " + customer_id;
                                                 ^^^ use real column name here

附带说明:不要直接从用户输入构建 SQL 查询字符串;改用参数。它可以防止您的代码受到 SQL 注入(inject)。阅读更多 here

据说您的代码可能如下所示

...
myComm.CommandText = "SELECT * FROM wdb_customer WHERE customer_id = @customer_id";
myComm.Parameters.AddWithValue("@customer_id", customer_id);
Reader = myComm.ExecuteReader(); 
...

关于c# - 变量未声明或从未分配?和数据读取器不工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16534232/

相关文章:

php - SHA 函数问题

c# - 如何获取之前连接的 USB 设备的时间戳?

c# - 如何使用 IHttpHandler 启用 OutputCache

mysqld_safe 不允许连接 MySQL

php - 将数据从一个数据库插入另一台服务器上的另一个数据库 - 服务器未链接

database - 搜索实体名称数据库(学院,城市,个性,国家...)

mysql - 针对给定情况的最佳数据库模式结构策略

c# - 合格双倍显示不正常

c# - ASP.NET 网络 API : any downsides to asynchronous operations?

mysql - 基于两个条件的 SQL 中的 ALTER 和 UPDATE 表