c# - 错误: You have specified an invalid column ordinal

标签 c# mysql database winforms sqldatareader

我在将数据从数据库加载到 Windows 窗体时遇到问题。我使用下面的代码通过数据读取器检索信息,然后将检索到的信息设置到适当的标签和图片框,但是当显示 AirSpace 表单时,我在标题中得到异常。我对此进行了一些研究,并得出结论,当应用程序尝试访问边界之外的序数时,会给出此异常,但在本示例中无效(我不认为)。

如果您需要任何进一步的解释或详细信息,请询问。提前致谢。

代码:

private void AirSpace_Shown(object sender, EventArgs e)
    {
        string connectionString = "datasource=localhost;port=3306;username=********;password=********";
        Login login = new Login();
        using (MySqlConnection conn = new MySqlConnection(connectionString))
        {
            using (MySqlCommand cmd = conn.CreateCommand())
            {
                string select = "SELECT username, premium, picture FROM userinfo.users WHERE username = @username;";
                //                        (0)       (1)      (2)
                conn.Open();
                cmd.CommandText = select;
                cmd.Parameters.AddWithValue("@username", login.UsernameTextBox.Text);
                using (MySqlDataReader Reader = cmd.ExecuteReader())
                {
                        While(Reader.read())
                        {
                        //Set the user's profile picture to the user's profile picture.
                        ProfilePicture.Load(Reader.GetString(2));
                        //Set the username to the user's username
                        Username.Text = Reader.GetString(0);
                        //Set the app version to the user's version
                        if (Reader.GetString(1) == "1")
                        {
                            AppVersionLabel.Text = "Premium";
                        }
                        else
                        {
                            AppVersionLabel.Text = "Free";
                        }
                     }
                }
            }
        }

最佳答案

列序号以 0 开头,而不是 1

string select = "SELECT username, premium, picture FROM userinfo.users WHERE username = @username;";
 //                        (0)       (1)      (2)

所以下面这行

ProfilePicture.Load(Reader.GetString(3));

应该是:

ProfilePicture.Load(Reader.GetString(2));

参见:25.2.3.5. MySqlDataReader

25.2.3.5.5. GetString

Gets the value of the specified column as a String object.

Parameters: The zero-based column ordinal.

Returns: The value of the specified column.

编辑:

您需要通读 DataReader,如下所示:

using (MySqlDataReader Reader = cmd.ExecuteReader())
{
    while (Reader.Read())
    {
        //Set the user's profile picture to the user's profile picture.
        ProfilePicture.Load(Reader.GetString(2));
        //Set the username to the user's username
        Username.Text = Reader.GetString(0);
        //Set the app version to the user's version
        if (Reader.GetString(1) == "1")
        {
            AppVersionLabel.Text = "Premium";
        }
        else
        {
            AppVersionLabel.Text = "Free";
        }
    }
}

关于c# - 错误: You have specified an invalid column ordinal,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20527527/

相关文章:

c# - 如何创建抽象类的实例?

c# - MONO 4.6.2 服务器 CPU 使用率高

mysql - Flask 应用程序中的第二个请求是否有修复 'MySQL connection not available' 的解决方案?

php - 用两个字段填充列表框 MYSQL

c# - UdpClient 发送 接收

c# - IDispatchMessageInspector 记录纯文本 SOAP 消息?

mysql - 为什么这个 SQL 语句不起作用

database - 如何计算 {A}->{B,C} 等合并项集的支持度/置信度和提升度

php - 我的子查询将执行时间增加 20 秒。我怎样才能加快速度?

mysql - 数据库排序规则区别UTF?拉丁? ETC。?