我的项目是一个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();
}
}
答案 0 :(得分:2)
也许这个问题比你想象的要容易。
如果在服务器中尝试相同的参数,就像在控制台应用程序中一样?
因此,请更改现有代码:
WriteToClientStream(clientStream, dbHandler.ReadSQL(string.Format(
"SELECT PlayerName FROM Player WHERE PlayerName = '{0}'", UserName)) + "\r\n");
要:
WriteToClientStream(clientStream, dbHandler.ReadSQL(string.Format(
"SELECT PlayerName FROM Player WHERE PlayerName = '{0}'", "Hex")));
如果有效,请试试。
如果是,如果您正确传递UserName
,则可能需要检查您的代码。
答案 1 :(得分:1)
可能是因为在将chars
编码为byte[]
string
运行System.Text.Encoding.UTF8.GetString(message)
后检查以确保没有空终止符或新行等。
示例:
System.Text.Encoding.UTF8.GetString(message).TrimEnd('\0', '\n');