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();
您将从查询返回单个值,因此您可以直接使用ExecuteScalar而不是ExecuteReader。(链接指向SqlServer的描述,但MySql也是如此)
永远不要忘记的一个重要问题是使用参数而不是字符串连接。
如果您的myuser
或mycode
变量包含一个单引号会发生什么?你会得到错误的结果或语法错误。当然,最主要的问题是永远不要低估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];