2014-09-24 88 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