2016-11-01 14 views
0

私はasp.netで入力から値を返そうとしています。しかし、問題は、私はnull値を受け取り続ける。しかし、それがクエリを介して挿入されているかのように文字列を入力すると正常に動作します。ASP.NetからMySQLへの入力NULL値

なぜNULL値を取得していますか?

This Works: 
[HttpPost] 
     [Route("A3Bans/searchBan")] 
     public string oSearchBan(tBan ban) 
     { 
      { 
       tBan bans = new tBan(); 
       string dbConnection = "datasource=127.0.0.1;port=3306;username=admin;password=00000"; 
       MySqlConnection conDataBase = new MySqlConnection(dbConnection); 
       MySqlDataReader dbReader; 

       MySqlCommand selectCommand = new MySqlCommand("SELECT `BanID`, `GUID`, `BanTime`, `Reason`, `BanType`, `Proof` FROM `a3bans`.`bans` WHERE `GUID`= 'e7af78997ef220a557c97a1a4c11e0c2'", conDataBase); //@prmGuid, conDataBase); // Returning a null value?! 

       // selectCommand.Parameters.AddWithValue("@prmGuid", new tID(ban.GuidOrIP)); 

       conDataBase.Open(); 
       dbReader = selectCommand.ExecuteReader(); 
       try 
       { 

        while (dbReader.Read()) 
        { 
         tBan searchBan = new tBan(); 
         searchBan.BanID = dbReader.GetString("BanID"); 
         searchBan.GuidOrIP = dbReader.GetString("GUID"); 
         searchBan.BanTime = dbReader.GetString("BanTime"); 
         searchBan.BanType = dbReader.GetString("BanType"); 
         searchBan.BanReason = dbReader.GetString("Reason"); 
         searchBan.BanType = dbReader.GetString("BanType"); 
         searchBan.Proof = dbReader.GetString("Proof"); 
         bans = searchBan; 
        } 

       } 
       catch (Exception ex) 
       { 

       } 
       finally 
       { 
        dbReader.Close(); 
        conDataBase.Close(); 
       } 
       return bans.Proof; 
      } 
     } 

ただし、別のソースから入力しようとすると、nullになります。

だから私の問題はここにある:コンストラクタと

MySqlCommand selectCommand = new MySqlCommand("SELECT `BanID`, `GUID`, `BanTime`, `Reason`, `BanType`, `Proof` FROM `a3bans`.`bans` WHERE `GUID`= '@prmGuid'", conDataBase); 

selectCommand.Parameters.AddWithValue("@prmGuid", new tID(ban.GuidOrIP)); 

クラス: おそらくcompletley間違っています。 にtID私はそれが私のコンストラクタだと思うし...任意の考えを持っていた場合

namespace A3Bans.Schemas 
{ 
    public class tID 
    { 
     public tID(string guidOrIP) 
     { 
      GuidOrIP = guidOrIP; 
     } 

     public string GuidOrIP { get; set; } 
     public string BanID { get; set; } 

    } 
} 

EDITは、それだけで間違った値を返すだ、それは部分的に動作するようになりました。

MySqlConnection con = new MySqlConnection(dbConnection); 
      MySqlCommand cmd; 
      con.Open(); 
      MySqlDataReader dbReader; 
      string cmdText = "SELECT `BanID`, `GUID`, `BanTime`, `Reason`, `BanType`, `Proof` FROM `a3bans`.`bans` WHERE `GUID` LIKE @pGUID"; 


      cmd = new MySqlCommand(cmdText, con); 

      cmd.Parameters.AddWithValue("@pGUID", "%" + bans.GuidOrIP + "%"); 

答えて

1

一重引用符の間にパラメータプレースホルダを挿入しないでください。このようにしてリテラル文字列になり、リテラル文字列 '@prmGuid'と等しい列GUIDの値を検索し、この条件では何も返されません。

ちょうど私が持っている

..... WHERE `GUID`= @prmGuid", conDataBase); 
+0

にあなたのSQLコマンドテキストを変更する、それはそれが動作するように得ることで、最後の試みでした。それでもnullを返す – Mokey

+0

AddWithValue行からコメントを削除しましたか?そして、このコードの結果は何であるのかはっきりしない:_new tID(ban.GuidOrIP)); _ 'e7af78997ef220a557c97a1a4c11e0c2'のような値を返さないようだ。 – Steve

+0

これは、挿入された文字列に基づいて文字列値を返すことになっているデータベースに格納されています。しかし、それはnullに戻ります。私はC#の初心者です.3日間、コードの行にいました。私のゴムのダッキーは家の向こうです – Mokey

関連する問題