0

在 mysql 中从我的表中读取值时出现问题,是索引值我无论如何都无法读取该值。我得到的只是初始化值 0 我没有得到任何错误,因为它返回 0,如果我在数据库中运行查询,它会得到正确的值。我尝试使用 executeScalar() 但结果相同。

     MySqlConnection conn = new MySqlConnection(MyConString);
    ulong ukey=0;
            try
            {
                string sql_users2 = "SELECT `key` FROM `permuser` WHERE `user` = '" + myuser + "' AND `code` = '" + mycode + "'";
                MySqlCommand cmdSel2 = new MySqlCommand(sql_users2, conn);
                conn.Open();
                MySqlDataReader dr2 = cmdSel2.ExecuteReader();
                dr2.Read();

                    ukey = dr2.GetUInt64(dr2.GetOrdinal("key")); 
                   // MessageBox.Show("Sorry " + myuser + " already have access to " + mycode + ",\nIf this is an extension, search for the user which key is  " + ukey + "   and edit the end date.", "Duplicate User Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning);

                dr2.Close();
                dr2.Dispose();
            }
            catch (MySqlException ex) //catch 2
            {

                MessageBox.Show("catch ukey\nCan't connect to database\n" + ex.ToString());
            }

            conn.Close();
            conn.Dispose();     
4

2 回答 2

1

您从查询中返回单个值,因此您可以直接使用ExecuteScalar而不是 ExecuteReader。(链接指向 SqlServer 的描述,但它与 MySql 相同)

永远不要忘记的一个重要问题是使用参数而不是字符串连接。
如果您的myusermycode变量包含单引号会怎样?您会得到错误的结果或语法错误。当然,主要问题是Sql Injection 攻击不可低估。

using(MySqlConnection conn = new MySqlConnection(MyConString))
{
    ulong ukey=0;
    try
    {
        string sql_users2 = "SELECT `key` FROM `permuser` WHERE `user` = @usr AND `code` = @code";
        MySqlCommand cmdSel2 = new MySqlCommand(sql_users2, conn);
        conn.Open();
        cmdSel2.Parameters.AddWithValue("@usr", myuser);
        cmdSel2.Parameters.AddWithValue("@code", mycode);

        object result  = cmdSel2.ExecuteScalar();
        if(result != null)
            ukey = Convert.ToUInt64(result); 


    }
    catch (MySqlException ex) //catch 2
    {
        MessageBox.Show("catch ukey\nCan't connect to database\n" + ex.ToString());
    }
}

我也对你对 UInt64 的使用感到有点困惑。列中存储了哪种数据类型key

于 2013-01-03T15:34:57.110 回答
0

方法很简单:

ukey = (uint)dr2[0];
于 2013-01-03T15:30:00.147 回答