我的項目是一個Windows服務,我遇到了麻煩,從我的數據庫返回的值,所以我分開的代碼位出到一個控制檯應用程序,以使更容易調試,但不工作的代碼在我的服務在控制檯應用程序中工作。SqlDataReader的項目之間表現不同
所以在我的服務我有這個類
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();
}
}
將調試器附加到服務並逐步執行該功能時會發生什麼?還有其他一些問題/問題:您沒有返回「IEnumberable」,您是否期望從查詢中返回多行?如果不是你,並且只返回第一列,那麼當你應該使用'ExecuteScalar()'時,爲什麼要使用'SqlDataReader'?同時返回一個字符串,而不是讓異常冒泡,似乎是我的奇怪設計選擇。你如何區分有效結果和錯誤? (這同樣適用於返回字符串'「假」'當你有沒有行) –
它不會讓我調試器附加到我的服務過程出於某種原因這就是爲什麼我把它分解出到一個控制檯應用程序進行測試。我有使用ExecuteScalar()類似的問題,這就是爲什麼我正在嘗試像SqlDataReader的東西。 ExecuteScalar()在控制檯應用程序中工作,但不在服務中。 e.ToString()返回 System.NullReferenceException:未將對象引用設置爲obj 等的實例。 在GWOService.DBHandler.ReadSQL(SQL字符串) – Hex
它打印'e.StackTrace'過,並得到確切的行號錯誤發生的。然後更新這個問題,指出你正在得到一個'NullRefrenceException'和哪一行。 –