当我在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中的可比查询,我知道这些数据应该在那里。
请协助。
发布于 2012-01-18 20:21:39
根据列的类型,尝试执行以下任一操作,而不是SqlDbType.Text:
SqlDbType.VarCharSqlDbType.NVarCharSqlDbType.NTextSqlDbType.NCharSqlDbType.Char发布于 2012-01-18 20:29:20
SELECT TSID
FROM tblTimesheets
WHERE TSUser = 'PJW' AND TSDate = '2012-01-18';在这里,您正在将确切的日期作为参数传递
当将参数传递给存储过程时,您传递的是"DateTime paramDate“
日期和时间变量
您可能需要解析为存储过程支持的确切日期格式,即,您需要将paramDate变量格式化为'YYYY-mm-DD‘
我不确定..。试试看..如果有帮助或没有帮助,请回复!
发布于 2012-01-18 20:29:42
当参数是DB类型date时,最好在设置参数时剥离时间部分,如下所示:
sqlCom.Parameters.Add("@TSDate", SqlDbType.Date);
sqlCom.Parameters["@TSDate"].Value = paramDate.Date;如果这不起作用,请告诉我,我将删除我的答案。
https://stackoverflow.com/questions/8909954
复制相似问题