我有一个简单的Windows服务,在这个服务中,我正在尝试连接到计时器块中的sql server(我试图在onStart方法中只执行一次 - >相同的结果)。
目前我正在尝试执行一个选择,使用以下代码:
using (SqlConnection sc = new SqlConnection())
{
var sqlConnection = new SqlConnection(_sqlConnectionString);
string commanda = "SELECT Moneda, SimbolMoneda FROM NomMoneda WHERE Moneda != '' AND SimbolMoneda != ''";
SqlCommand command = new SqlCommand(commanda, sqlConnection);
command.CommandType = System.Data.CommandType.Text;
IDataReader reader;
sc.ConnectionString = _sqlConnectionString;
sc.Open();
reader = command.ExecuteReader(CommandBehavior.CloseConnection);
}
我将服务附加到debug,我注意到它没有通过这行代码sc.Open()
。
该服务与sql server不在同一台机器上,但我尝试将其安装在不同的用户,LocalSystem,NetworkService,与sql server在同一域内的用户,但没有结果。
任何帮助都将不胜感激。
答案 0 :(得分:4)
看起来您可能在此代码中出现逻辑错误。您正在使用sc
作为SqlConnection
,但是在创建命令对象时,您使用sqlConnection
,它实际上从未打开过。
这一行是问题所在:
SqlCommand command = new SqlCommand(commanda, sqlConnection);
请尝试以下方法:
SqlCommand command = new SqlCommand(commanda, sc);
在用户评论后的10:22编辑
为了确认您已按照指示进行了更改,我已重新编写代码。你可以尝试以下方法:
using (SqlConnection sc = new SqlConnection())
{
sc.ConnectionString = _sqlConnectionString;
sc.Open();
string commanda = "SELECT Moneda, SimbolMoneda FROM NomMoneda WHERE Moneda != '' AND SimbolMoneda != ''";
SqlCommand command = new SqlCommand(commanda, sc);
command.CommandType = System.Data.CommandType.Text;
IDataReader reader;
reader = command.ExecuteReader();
}
答案 1 :(得分:0)
我希望无论问题是什么,都会更容易弄清楚你是否有一个记录机制来捕获和记录未处理的异常。由于Windows服务没有用户界面,您应该从头开始实施日志记录。否则,您将达到服务意外终止的程度,以及您从系统日志中收集的少量信息将无法为您提供帮助。
简而言之,添加文件记录,您可能会立即发现问题。
答案 2 :(得分:0)
问题很简单,但很难察觉。我的连接字符串没有以@ char:
作为前缀 ex: _connectionString = @"Data Source =.......";