2017-04-25 80 views
-2

因此,当我在C#程序中运行此代码时,它将返回false。然而,当我在visual sutdio的查询设计器中返回它时,它会返回正确的值。SQL在我的代码中不起作用,但在查询时起作用

private void GetUserELO(int UserID, ref double Elo) 
    { 
     clsDBConnector dbConnector = new clsDBConnector(); 
     OleDbDataReader dr; 
     string sqlStr; 
     dbConnector.Connect(); 
     sqlStr = "SELECT Users.Elo FROM Users WHERE UserID = " + UserID + ""; 
     dr = dbConnector.DoSQL(sqlStr); 
     while (dr.Read()) 
     { 
      string Elo1 = Convert.ToString(dr.Read()); 
      MessageBox.Show("User Added" + UserID, "Sucessfully Added User" + 
      Elo1, 
      MessageBoxButtons.OK, MessageBoxIcon.Hand); 
     } 
    } 

请忽略仅显示输出的消息框。

+3

怎么样你告诉我们,在'dbConnector.DoSQL'魔术 – stuartd

+1

要调用'Read'什么,我认为是一个DataReader 。你不想这样做,因为它前进到下一条记录而不是返回值 - 你可以使用字符串Elo1 = dr.GetString(0);' – stuartd

回答

2

您在每次迭代中对dr.Read()进行2次调用。你必须只有一个。 使用的GetValue用于访问列结果和阅读来获取下一个记录

private void GetUserELO(int UserID, ref double Elo) 
    { 
     clsDBConnector dbConnector = new clsDBConnector(); 
     OleDbDataReader dr; 
     string sqlStr; 
     dbConnector.Connect(); 
     sqlStr = "SELECT Users.Elo FROM Users WHERE UserID = " + UserID + ""; 
     dr = dbConnector.DoSQL(sqlStr); 
     while (dr.Read()) 
     { 
      string Elo1 = dr.GetValue(0).ToString(); 
      MessageBox.Show("User Added" + UserID, "Sucessfully Added User" + 
      Elo1, 
      MessageBoxButtons.OK, MessageBoxIcon.Hand); 
     } 
    } 
+0

谢谢!你修好了你是一个救世主! – Smadger

+0

请标记答案为正确的,并为此投票,谢谢 –

+0

我标记了它,但由于作为一个新成员而无法上传它。但非常感谢你! – Smadger

相关问题