当我在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中的可比查询,我知道应该存在这些数据。
请协助。
答案 0 :(得分:1)
而不是SqlDbType.Text
尝试以下任何一种情况,具体取决于列的类型:
SqlDbType.VarChar
SqlDbType.NVarChar
SqlDbType.NText
SqlDbType.NChar
SqlDbType.Char
答案 1 :(得分:1)
SELECT TSID
FROM tblTimesheets
WHERE TSUser = 'PJW' AND TSDate = '2012-01-18';
这里U r将确切日期作为参数
传递将参数传递给您传递的存储过程时 “DateTime paramDate”
日期时间变量
可能需要解析存储过程支持的确切日期格式 即你需要将paramDate变量格式化为'YYYY-mm-DD'
我不确定..试试吧..如果有帮助还是回复!
答案 2 :(得分:1)
当参数为DB类型date
时,最好在设置参数时防御性地删除时间部分,如下所示:
sqlCom.Parameters.Add("@TSDate", SqlDbType.Date);
sqlCom.Parameters["@TSDate"].Value = paramDate.Date;
如果这没有用,请告诉我,我会删除我的答案。
答案 3 :(得分:1)
您说ExecuteScalar
失败,没有错误消息。将代码包装在try-catch块中,以确保捕获ExecuteScalar()
可能引发的任何异常。
除此之外,尝试并按照其他人的建议进行操作并查看使用SQL事件探查器生成的SQL,然后在SSMS中运行该SQL以比较结果。