私のプロジェクトは Windows サービスであり、データベースから値を返すのに問題があったため、デバッグを容易にするためにコードの一部をコンソール アプリケーションに分離しましたが、サービスで機能しないコードはコンソール アプリケーションで機能します.
だから私のサービスにはこのクラスがあります
public class DBHandler
{
public string ReadSQL(string sql)
{
try
{
using (SqlConnection DBConnection = new SqlConnection(@"Data Source=***;Initial Catalog=***;Integrated Security=True;User ID=***;Password=***"))
{
DBConnection.Open();
SqlCommand DBCommand = new SqlCommand(sql, DBConnection);
SqlDataReader sqlResults = DBCommand.ExecuteReader();
if (sqlResults.HasRows)
{
while (sqlResults.Read())
{
return sqlResults.GetString(0);
}
}
return sqlResults.HasRows.ToString();
}
}
catch (Exception e)
{
return e.ToString();
}
}
私が使用しているもの
DBHandler dbHandler = new DBHandler();
WriteToClientStream(clientStream, dbHandler.ReadSQL(string.Format("SELECT PlayerName FROM Player WHERE PlayerName = '{0}'", UserName)) + "\r\n");
sqlResults.HasRows は false を返しますが、同じクエリが SQL Server とテスト コンソール アプリケーションで結果を返します。
public static void Main(string[] args)
{
Console.WriteLine(ReadSQL(string.Format("SELECT PlayerName FROM Player WHERE PlayerName = '{0}'", "Hex")));
Console.ReadLine();
}
public static string ReadSQL(string sql)
{
try
{
using (SqlConnection DBConnection = new SqlConnection(@"Data Source=***;Initial Xatalog=***;Integrated Security=True;User ID=***;Password=***"))
{
DBConnection.Open();
SqlCommand DBCommand = new SqlCommand(sql, DBConnection);
SqlDataReader sqlResults = DBCommand.ExecuteReader();
if (sqlResults.HasRows)
{
while (sqlResults.Read())
{
return sqlResults.GetString(0);
}
}
return sqlResults.HasRows.ToString();
}
}
catch (Exception e)
{
return e.ToString();
}
}