SQLQuery表示没有提供参数,但是会添加到SqlCommand对象中aname对于UserName的参数,在我后面的代码中有一个SqlCommand对象,我使用Add方法添加参数。但由于某种原因,当命令对象尝试运行ExecuteReader方法时,它会抛出异常。我完全不知道为什么它不识别参数。我在运行ExecuteReader方法之前设置了一个断点,因此我可以确认命令对象确实包含正在设置的参数,这是真的。我知道当参数未添加到命令对象时存储过程确实返回正确的数据,但它在实际存储过程中是硬编码的。下面是catch块中给出的异常消息。我还将粘贴我的代码和存储过程的第一部分。我真的很感激任何帮助解决这个问题,因为我已经尝试了很多不同的事情都无济于事。提前致谢。异常消息过程或函数“someStoredProcedure”需要未提供的参数“@UserName”。代码背面privateDataTableGetLossMitData(stringcode,DateTime?start,DateTime?end){DataTableresults=newDataTable();字符串connectionString=ConfigurationManager.ConnectionStrings["asdf"].ConnectionString;字符串用户名=String.Empty;尝试{使用(SPSite站点=newSPSite(ConfigurationManager.AppSettings["someName"])){使用(SPWebweb=site.OpenWeb()){userName=web.CurrentUser.Email.ToString();}}使用(SqlConnectionconnection1=newSqlConnection(connectionString)){connection1.Open();使用(SqlCommandcommand1=newSqlCommand("someStoredProcedure",connection1)){command1.Parameters.Add(newSqlParameter("@UserName",userName));command1.Parameters.Add(newSqlParameter("@ProductCode",code));SqlDataReaderdr=command1.ExecuteReader(CommandBehavior.CloseConnection);结果.负载(博士);}connection1.Close();}}catch(Exceptionex){}返回结果;}存储过程@UserNamenvarchar(256),@ProductCodenvarchar(256),@StartDatenvarchar(256)='1/1/1900',@EndDatenvarchar(256)='12/30/2012'作为开始设置NOCOUNTON;声明@UserIDintSelect@UserID=Users.UserIDfromUserswhereUsers。Email=@UserName尽量确保命令类型设置为存储过程mycommand.CommandType=System.Data.CommandType.StoredProcedure;如果'userName'变量的值为null,就会出现这个异常如果null有效,则将"DBNull.Value"传递给db:command1.Parameters.Add(newSqlParameter("@UserName",(userName??DBNull.Value));Command1.CommandType=System.Data.CommandType.StoredProcedure这将强制ExecuteReader执行exec而不是仅仅作为一个平面命令执行。默认情况下,CommandText属性需要包含完整的SQL命令,而不仅仅是存储过程的名称。您可以通过将SqlCommand的CommandType属性设置为StoredProcedure来更改此设置。或者,您可以通过将CommandText更改为“someStoredProcedure@UserName,@ProductCode”以显式传递参数来更改此设置;这是一个完整的SQL语句,可以使用Text的默认CommandType。编辑:我刚刚尝试过,并没有将CommandType设置为StoredProcedure(他没有这样做的唯一方法)是在CommandText为EXEC时获取该错误消息someStoredProcedure.传递空参数会产生不同的错误。以上是C#学习教程:SQLQuery表示不提供任何参数,但会添加到SqlCommand对象中,分享所有内容。如果对你有用,需要了解更多C#学习教程,希望大家多加关注——本文来自网络收藏,不代表立场,如涉及侵权,请点击右边联系管理员删除。如需转载请注明出处:
