带参数的C#存储过程
我在我的应用程序中收到错误,我无法弄清楚如何解决它。 这是代码:
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无法将参数值从Task转换为String。
我认为它与我放置try的位置有关(在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
myCommand2.Parameters.Add("@TaskName", SqlDbType.NVarChar, 50).Value = t.Name;
在线:
myCommand2.Parameters.Add("@TaskName", SqlDbType.NVarChar, 50).Value = t;
我想你必须在任务名称上传递t.Name
或t.ToString()
(我不知道)。
我认为问题在于这一行:
myCommand2.Parameters.Add("@TaskName", SqlDbType.NVarChar, 50).Value = t;
t不能转换为字符串。 您可以尝试使用t.Name or t.ToString()
(不确定该类的哪些属性可用于我的头顶。)
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;
您正在传递任务对象而不是任务的名称。
上述就是C#学习教程:带参数的C#存储过程分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/949018.html