c#从mysql中读取int

本文关键字:读取 int mysql | 更新日期: 2023-09-27 17:50:45

在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();     

c#从mysql中读取int

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

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

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列中存储什么样的数据类型?

方法有很多:

ukey = (uint)dr2[0];