我想查询远程服务器上的服务并将它们插入到SQL中。我知道我错过了一些实际上会写回来的东西,但我无法弄清楚它是什么。一切工作,直到我试图写入数据到SQL。以编程方式获取Windows服务并写入SQL
static void Main(string[] args)
{
string username = ConfigurationManager.AppSettings["UserName"].ToString();
string password = ConfigurationManager.AppSettings["Password"].ToString();
string domain = ConfigurationManager.AppSettings["Domain"].ToString();
var logonType = SimpleImpersonation.LogonType.NewCredentials;
using (SimpleImpersonation.Impersonation.LogonUser(domain, username, password, logonType))
{
var connection = ConfigurationManager.ConnectionStrings["Connection"].ConnectionString;
using (SqlConnection conn = new SqlConnection(connection))
{
conn.Open();
using (SqlCommand command = new SqlCommand("SELECT ServerName, ServerIP FROM Server", conn))
{
SqlDataReader reader = command.ExecuteReader();
while (reader.Read())
{
string serverIP = reader["ServerIP"].ToString();
string serverName = reader["ServerName"].ToString();
ServiceController[] services = ServiceController.GetServices(serverIP);
foreach (ServiceController service in services)
{
using (SqlCommand cmd = new SqlCommand("sp_InsertServices", conn))
{
cmd.CommandType = System.Data.CommandType.StoredProcedure;
SqlParameter ID = new SqlParameter();
ID.ParameterName = "@ID";
ID.Direction = System.Data.ParameterDirection.Output;
cmd.Parameters.AddWithValue("@ID", ID);
cmd.Parameters.AddWithValue("@Display", service.DisplayName);
cmd.Parameters.AddWithValue("@Service", service.ServiceName);
cmd.Parameters.AddWithValue("@Status", service.Status);
cmd.Parameters.AddWithValue("@Server", serverName);
}
}
}
}
}
}
}
这里是存储过程
PROCEDURE [dbo].[sp_InsertServices]
@ID int,
@Display nvarchar(50),
@Service nvarchar(50),
@Status nvarchar(50),
@Server nvarchar(50)
AS
BEGIN
SET NOCOUNT ON
INSERT INTO Services
(ID,
DisplayName,
ServiceName,
Status,
Server)
VALUES
(@ID,
@Display,
@Service,
@Status,
@Server)
SET @ID = SCOPE_IDENTITY()
END
编辑:对不起一些更多的信息。在param添加后,我在最后添加了一个执行,并且出现此错误。
“System.InvalidOperationException”类型的未处理的异常出现在system.data.dll
其他信息:已经有一个用此命令,必须先关闭相关联的打开的DataReader。
看起来我需要关闭第一个阅读器,但我仍然在第二个命令中使用它。现在不要在那里我可以安全地关闭它。
什么是你的错误? –
在执行完第一个之后关闭它,然后重新打开它:) – ImDeveloping