2014-11-29 2 views
0

C#을 배우려고하면 쿼리를 수행하고 결과를 얻는 데 도움이되지 않습니다. C# .NET에서 아래의 작업을 수행하는 가장 좋은 방법과 방법을 모두 파악하려고합니다. 그것은 MySQL 데이터베이스입니다.동등한 C#이 PHP 코드의

//Interact with the DB. Find out if this hashed account #'s in there. 
$dbh = $this->getPDO(); 
$procedure = "SELECT userPass FROM 499Users WHERE accName = :acc"; 
$call = $dbh->prepare($procedure); 
$call->bindParam(':acc', $testAcc, PDO::PARAM_STR); 
$call->execute(); 

//Fetch up to 1 result row 
$row = $call->fetch(PDO::FETCH_ASSOC); 

이 내 최신 시도이다 는 또한 내가 아마 매개 변수를 사용해야 실현,하지만 난 그냥이

MySqlConnectionStringBuilder conn_string = new MySqlConnectionStringBuilder(); 

conn_string.Server = "*"; 
conn_string.UserID = "*"; 
conn_string.Password = "*"; 
conn_string.Database = "*"; 
conn_string.Port = 3306; 

MySqlConnection connection = new MySqlConnection(conn_string.ToString()); 


try 
{ 
    Console.WriteLine("Trying to connect to: ..." + conn_string); Console.WriteLine("Connecting to MySQL..."); 

    connection.Open(); 

} 
catch (Exception ex) 
{ 
    Console.WriteLine(ex.ToString()); 
} 

string hashedAcc = this.HashPassword(acc); 
//Verify hashed account 
string query = "SELECT userPass FROM 49Users WHERE accName =" + hashedAcc; 

MySqlCommand cmd = new MySqlCommand(query, connection); 

MySqlDataReader myReader; 
myReader = cmd.ExecuteReader(); 
try 
{ 
    while (myReader.Read()) 
    { 
     Console.WriteLine(myReader.GetString(0)); 
    } 
} 
finally 
{ 
    myReader.Close(); 
    connection.Close(); 
} 
+1

무언가를 시도해 주셔서 감사합니다. 포함 해 주셔서 감사합니다. 그러나 C# 코드가 어떤 방식으로 실패합니까? 예외가 있습니까? 예상 된 결과가 아닙니까? –

+0

예 : 'MySql.Data.MySqlClient.MySqlException'유형의 처리되지 않은 예외가 MySql.Data.CF.dll에서 발생했습니다. * 명령 실행 중 치명적인 오류가 발생했습니다. * – user2079828

+1

스택 추적이 있습니까? 어떤 라인이 예외를 던지고 있는지 나타내는 어떤 지시? –

답변

2

을 다음 처음 작업 할 WHERE 절 :

WHERE accName =" + hashedAcc; 
accNameint이 아닌 경우

은 오류를 일으킬 수 있습니다. 주위에 따옴표가 필요합니다.

PDO에서와 마찬가지로 매개 변수화 된 쿼리를 사용하면이 오류 및 SQL 주입과 같은 오류를 피할 수 있습니다.

var query = "SELECT userPass FROM 49Users WHERE accName = @hashedAcc"; 
var cmd = new MySqlCommand(query, connection); 
cmd.Parameters.AddWithValue("@hashedAcc", hashedAcc); 
+0

그랬습니다. 그래서 내가 그 권리를 읽으면 근본적으로 문자 그대로를 줄 필요가 있습니다. 매개 변수 문서를 살펴 보겠습니다. 무리 감사. – user2079828

+2

몇 번이나 이런 질문을 한 번 보았지만 하나의 매개 변수 대신 누군가가 10을 연결했습니다. 일부는 숫자이고, 일부는 문자열이며 궁극적으로 단일 어포 스트로피는 어딘가에서 빠져 나옵니다. 그 밖의 것이 없다면, 매개 변수가있는 쿼리는 찾고 청소하기가 쉽습니다. –

+0

제일 먼저해야 할 일은 잘 작동하는 것이므로 ... 베스트 프랙티스에 대해 걱정하지 않으셔도됩니다. 내가 매개 변수를 실행해야하며 들어 와서 (과장) 소리가 나올 거라는 것을 알았지 만, 여전히 어느 쪽이든 작동하지 못했습니다. – user2079828