问题描述
运行提示ProcedureorFunction'sdk_sp_showresult'expectsparameter'@date',whichwasnotsupplied.代码如下:DimconnAsSqlClient.SqlConnectionDimdadAsSqlClient.SqlDataAdapterDimdstAsDataSetDimcmmAsSqlClient.SqlCommandDimpara1AsSqlClient.SqlParameterDimpara2AsSqlClient.SqlParameterDimdrdAsSqlClient.SqlDataReaderconn=NewSqlClient.SqlConnection(ls_connstr)conn.Open()cmm=NewSqlClient.SqlCommand("sdk_sp_showresult",conn)cmm.CommandType=CommandType.StoredProcedurepara1=cmm.Parameters.Add("@data",SqlDbType.DateTime)para1.Direction=ParameterDirection.Input'para1.Value=CType(dtp1.Value.ToString,Date)para1.Value=NewSystem.Nullable(OfDate)(CType(dtp1.Value.ToShortDateString,Date))msgbox(para1.Value.ToString,MsgBoxStyle.Critical)para2=cmm.Parameters.Add("@count",SqlDbType.Int)para2.Direction=ParameterDirection.Inputpara2.Value=CType(mtb1.Text,Integer)drd=cmm.ExecuteReader()
解决方案
解决方案二:
数据库中的DATE类型和.NET中的DATE类型格式是不同的,你要入的Date参数必须是数据库支持的Datepara1.Value=NewSystem.Nullable(OfDate)(CType(dtp1.Value.ToShortDateString,Date))这句应该改为:(在ORACLE数据库下):dimstrTempDateasstringdimInputDateasdatestrTempDate=Convert.ToDateTime(dtp1.Value).Date.Tostring("yyyyMMdd")'先在.net下把DTP1的值转换为可执行的STRING日期格式dimstrSqlasstring="selectto_date('"&strTempDate&"','yyyyMMdd')fromdual"‘再从数据库中用STRING取出DATEInputDate=用数据集取出查询strSql得到的Date值para1.Value=InputDate是可以成功的,但一般我们公司建立存储过程不爱用Date类型做参数,都是用string,然后在存储过程中将string类型参数转换成Date类型,这样.net程序就好写的多了。
解决方案三:
不要用DateTime类型,直接用字符型就好了,SQL自己会转换的