我想查詢遠程服務器上的服務並將它們插入到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