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中的可比较查询,我知道这些数据应该存在。

请协助。

SqlCommand参数出现问题

根据列的类型,尝试以下任何操作,而不是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"

我不确定。。试试看…如果有帮助或没有帮助,请回复!