SqlCommand参数出现问题
本文关键字:问题 参数 SqlCommand | 更新日期: 2023-09-27 18:20:34
当我在SSMS中执行以下查询时,我会得到预期的结果,即'1'
SELECT TSID
FROM tblTimesheets
WHERE TSUser = 'PJW' AND TSDate = '2012-01-18';
但是,当SqlCommand由我的应用程序中的代码生成时,ExecuteScalar会失败(它只是导致方法退出而不显示错误消息)。
public int GetID(string paramUser, DateTime paramDate)
{
string strSql = "SELECT TSID " +
"FROM tblTimesheets " +
"WHERE TSUser = @TSUser AND TSDate = @TSDate;";
string strConnection = BuildConnectionString();
SqlConnection linkToDB = new SqlConnection(strConnection);
linkToDB.Open();
SqlCommand sqlCom = new SqlCommand(strSql, linkToDB);
sqlCom.Parameters.Add("@TSUser", SqlDbType.Text);
sqlCom.Parameters.Add("@TSDate", SqlDbType.Date);
sqlCom.Parameters["@TSUser"].Value = paramUser;
sqlCom.Parameters["@TSDate"].Value = paramDate;
int intResult = (Int32)sqlCom.ExecuteScalar();
linkToDB.Close();
return intResult;
}
我已经逐步完成了代码,可以根据需要确认参数是PJW和2012-01-18,但ExecuteScalar返回任何数据,根据我在SSMS中的可比较查询,我知道这些数据应该存在。
请协助。
根据列的类型,尝试以下任何操作,而不是SqlDbType.Text
:
SqlDbType.VarChar
SqlDbType.NVarChar
SqlDbType.NText
SqlDbType.NChar
SqlDbType.Char
当参数为DB类型date
时,最好在设置参数时防御性地剥离时间部分,如下所示:
sqlCom.Parameters.Add("@TSDate", SqlDbType.Date);
sqlCom.Parameters["@TSDate"].Value = paramDate.Date;
如果这没有帮助,请告诉我,我会删除我的答案。
您说ExecuteScalar
失败,没有错误消息。将代码封装在try-catch块中,以确保ExecuteScalar()
可能抛出的任何异常都被捕获。
除此之外,请按照其他人的建议尝试并查看使用SQL Profiler生成的SQL,然后在SSMS中运行该SQL以比较结果。
SELECT TSID
FROM tblTimesheets
WHERE TSUser = 'PJW' AND TSDate = '2012-01-18';
在这里,U r将确切的日期作为参数
Where as在将参数传入要传递的存储过程时"DateTime paramDate"
日期-时间变量
您可能需要解析为存储过程支持的精确日期格式即,您需要将paramDate变量格式化为"YYYY mm DD"
我不确定。。试试看…如果有帮助或没有帮助,请回复!