1

我有一个简单的 Windows 服务,在这个服务中,我试图在一个计时器块中连接到一个 sql 服务器(我只在 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);

            }

我将服务附加到调试,我注意到它没有通过这行代码sc.Open()

该服务与sql server不在同一台机器上,但我尝试将其安装在不同的用户下,LocalSystem,NetworkService,与sql server在同一域内的用户,但没有结果。

任何帮助,将不胜感激。

4

3 回答 3

4

看起来您在此代码中可能存在逻辑错误。您正在使用scSqlConnection但是当您创建您使用的命令对象时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();
}
于 2013-07-30T08:59:14.280 回答
0

我希望无论问题是什么,如果您有一个日志机制来捕获和记录未处理的异常,会更容易弄清楚。由于 Windows 服务没有用户界面,因此您应该从一开始就实现日志记录。否则,您将到达服务意外终止的地步,您从系统日志中收集的少量信息将不足以帮助您。

简而言之,添加文件日志记录,您可能会立即找出问题所在。

于 2013-07-30T09:00:09.717 回答
0

问题很简单,但很难发现。我的连接字符串没有以@ char 为前缀:

   ex: _connectionString = @"Data Source =.......";
于 2013-07-31T10:49:44.013 回答