2

私のプロジェクトは 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();
    }
}
4

2 に答える 2

1

tocharsをエンコードした後、文字列の末尾の末尾が原因である可能性がありますbyte[]string

チェックを実行した後System.Text.Encoding.UTF8.GetString(message)、null ターミネータや改行などがないことを確認します。

例:

System.Text.Encoding.UTF8.GetString(message).TrimEnd('\0', '\n');
于 2013-08-26T03:25:37.403 に答える