2014-09-24 100 views
0

我正在做一些需要MySQL的东西。我从游戏中完成了保存,这是通过INSERT完成的。检查并保存/加载MySQL C#

我有一列,将有一个密码,我需要检查,如果输入的密码不匹配的任何行,然后如果是这样,让所有的行的内容,然后将其保存到变量。

有没有人有一个想法如何做到这一点在C#中?

//////////////////////////

我已经找到如何保存和获取字符串,但它只会变得1串在一个时间:(

MySql.Data.MySqlClient.MySqlCommand command = conn.CreateCommand(); 
command.CommandText = "SELECT * FROM (player) WHERE (pass)"; 
command.ExecuteNonQuery(); 
command.CommandType = System.Data.CommandType.Text; 
MySql.Data.MySqlClient.MySqlDataReader reader = command.ExecuteReader(); 
reader.Read(); 
ayy = reader.GetString(1); 
print (ayy); 
if(ayy == password){ 
    //something 
} 
+0

我不能完全记住它的SQL,因为它已经过了几个月,因为我上次使用它(因此不会作为答案发布),但是您应该能够查询具有与输入的密码匹配的密码列。那么,我假设,会返回一个对象或者一个可以正确处理的字符串(例如,使用正则表达式)。但是,如果密码不是唯一的,那么您将需要小心,因为最终可能会有多行返回到您的程序。 – Crabgor 2014-09-24 19:02:22

+0

嗨Cragor,我确保用户输入一个唯一的密码:) – user2913720 2014-09-24 19:15:06

+0

它一次只获取一个字符串的意义,一次只获得一列的信息价值?如果没有,你看到了什么?读者包含什么字符串? – Crabgor 2014-09-24 19:28:56

回答

-1

我最好的做法是用MySQLDataAdapter填充DataTable然后,您可以通过行迭代并尝试匹配密码

事情是这样的;

 DataTable dt = new DataTable(); 
     using(MySQLDataAdapter adapter = new MySQLDataAdaper(query, connection)) 
     { 
      adapter.Fill(dt); 
     } 

     foreach(DataRow row in dt.Rows) 
     { 
     //Supposing you stored your password in a stringfield in your database 
     if((row.Field<String>("columnName").Equals("password")) 
     { 
       //Do something with it 
     } 


     } 

我希望这编译因为我打字这个从我的手机。你可以找到一个很好的解释和例子here

但是,如果你是从一个特定的用户需要的数据,为什么不specificly从数据库问吗?你的查询会像;

 SELECT * FROM usercolumn WHERE user_id = input_id AND pass = input_pass 

因为我想每个用户都是独一无二的,你现在会从特定用户获取数据,这意味着你不应该检查密码了。

+0

将“tableName”作为我的表,我有我的密码列?也出现错误:foreach语句无法对'System.Data.DataTable'类型的变量操作,因为它不包含'GetEnumerator'的定义或不可访问 – user2913720 2014-09-24 19:57:15

+0

您必须遍历行或列,而不是表本身。 – Crabgor 2014-09-24 20:00:13

+0

我将它编辑为“columnName”以使其更清晰。你得到的错误可能是因为我忘记告诉foreach循环遍历'dt.Rows'而不是'dt'。代码现在应该可以工作。 – 2014-09-24 20:01:46

-1

对于SQL语句,您应该能够按照以下方式搜索数据库,并只获取您需要的条目。

"SELECT * FROM table_name WHERE column_name LIKE input_string" 

如果input_string包含任何对SQL字符串比较特殊字符(%和_,我相信),你只需要逃避它们可以很简单地用正则表达式来完成。正如我在评论中所说的那样,自从我完成SQL以来已经有一段时间了,但有大量资源在线用于完善该查询。

然后,这应该返回整行,如果我正确思考,你应该能够然后把整个行放入一个对象的数组,或者只是读取它们的字符串字符串并将其转换为值使用的Convert方法中的一种必需的,因为在这里找到:http://msdn.microsoft.com/en-us/library/system.convert(v=vs.110).aspx

编辑按大奖赛的评论:数据输入到MySQL表应该不需要转换。如果你能够让他们到对象数组,该作品,以及

string x = [...]; 
[...] 
var y = Convert.ToInt32(x); 

实例得到一个整数。

object[] obj = [...]; 
[...] 
var x0 = Convert.To[...](obj[0]); 
var x1 = Convert.To[...](obj[1]); 

等等。

+1

You don如果您正确使用MySql.Data提供的方法来读取数据,就不必转换任何东西。 – Prix 2014-09-24 19:55:09

+0

够公平的,我已经说了一段时间了,我会提到的,谢谢! – Crabgor 2014-09-24 19:57:08

+0

[公开实例方法] (http://dev.mysql.com/doc/connector-net/en/connector-net-ref-mysqlclient-mysqlcommandmembers.html#connector-net-ref-mysqlclient-mysqlcommand-executereader-overloads)它显示[GetInt32] (http://dev.mysql.com/doc/connector-net/en/connector-net-ref-mysqlclient-mysqlcommandmemb ers.html#connector-net-ref-mysqlclient-mysqldatareader-getint32)等等。 – Prix 2014-09-24 20:04:23