簡體   English   中英

C# 帶參數的存儲過程

[英]C# stored procedure with parameters

我在我的應用程序中收到一個錯誤,我不知道如何解決它。 這是代碼:

SqlConnection myConnection = new SqlConnection(ConfigurationManager.ConnectionStrings["DBConnection"].ConnectionString);
myConnection.Open();

SqlCommand cmd = new SqlCommand("SELECT ServerIP FROM Servers", myConnection);

SqlDataReader rdr = cmd.ExecuteReader();

if (rdr.HasRows)
{
   while (rdr.Read())
   {
      string serverIP = rdr["ServerIP"].ToString();
      ScheduledTasks st = new ScheduledTasks(@"\\" + serverIP);
      string[] taskNames = st.GetTaskNames();

      foreach (string name in taskNames)
      {
         Task t = st.OpenTask(name);
         var status = t.Status;
         var recentRun = t.MostRecentRunTime;
         var nextRun = t.NextRunTime;
         var appName = t.ApplicationName;

         SqlConnection myConnection2 = new SqlConnection(ConfigurationManager.ConnectionStrings["DBConnection"].ConnectionString);
         SqlCommand myCommand2 = new SqlCommand("sp_AddScheduledTasks", myConnection2);

         try
         {
            myConnection2.Open();
            myCommand2.CommandType = CommandType.StoredProcedure;
            myCommand2.Parameters.Add("@ID", SqlDbType.Int);
            myCommand2.Parameters["@ID"].Direction = ParameterDirection.Output;
            myCommand2.Parameters.Add("@ServerIP", SqlDbType.NVarChar, 20).Value = serverIP;
            myCommand2.Parameters.Add("@TaskName", SqlDbType.NVarChar, 50).Value = t;
            myCommand2.Parameters.Add("@MostRecentRun", SqlDbType.DateTime).Value = recentRun;
            myCommand2.Parameters.Add("@NextRunTime", SqlDbType.DateTime).Value = nextRun;
            myCommand2.Parameters.Add("@AppName", SqlDbType.NVarChar, 50).Value = appName;
            myCommand2.Parameters.Add("@Status", SqlDbType.NVarChar, 50).Value = status;

            int rows = myCommand2.ExecuteNonQuery();
         }
         finally
         {
            myConnection2.Close();
         }

我收到的錯誤是ExecuteNonQuery 它說

InvalidCastException 無法將參數值從任務轉換為字符串。

我認為這與我在哪里嘗試(在 if 語句中)有關,但我不確定。 任何幫助將非常感激。

謝謝,

馬特

我的猜測是在

   myCommand2.Parameters.Add("@TaskName", SqlDbType.NVarChar, 50).Value = t;

t 不是字符串?

t 屬於Task類型,但是當您將其傳遞給存儲過程時,您將其作為nvarchar傳遞。

這是您的代碼:

myCommand2.Parameters.Add("@TaskName", SqlDbType.NVarChar, 50).Value = t;

假設您的name變量確實是@TaskName只需使用name

myCommand2.Parameters.Add("@TaskName", SqlDbType.NVarChar, 50).Value = name;

或者如果你覆蓋ToString()

myCommand2.Parameters.Add("@TaskName", SqlDbType.NVarChar, 50).Value = t.ToString();

或者如果您的Task中有Name object

myCommand2.Parameters.Add("@TaskName", SqlDbType.NVarChar, 50).Value = t.Name;

在行中:

myCommand2.Parameters.Add("@TaskName", SqlDbType.NVarChar, 50).Value = t;

我認為您必須在任務名稱上傳遞t.Namet.ToString() (我不知道)。

我認為問題出在這一行:

myCommand2.Parameters.Add("@TaskName", SqlDbType.NVarChar, 50).Value = t;

t 不能轉換為字符串。 您可以嘗試t.Name or t.ToString() (不確定我頭頂上的 class 有哪些屬性可用。)

T 是 Task 的類型,並且嘗試將其轉換為字符串,您應該將t.GetType().Name或真正的任務名稱放在這里,因為我們不能將對象作為參數傳遞,唯一的類型是已知的 sqltypes

  myCommand2.Parameters.Add("@TaskName", SqlDbType.NVarChar, 50).Value = t;

t是一個Task而不是一個字符串。 這應該是name

在線上:

myCommand2.Parameters.Add("@TaskName", SqlDbType.NVarChar, 50).Value = t;

't' 是一個任務,而不是一個字符串。 您需要獲取任務名稱(從外觀上看)

問題出在這一行:

myCommand2.Parameters.Add("@TaskName", SqlDbType.NVarChar, 50).Value = t;

您傳遞的是任務 object 而不是任務的名稱。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM