SqlCommand参数问题

时间:2012-01-18 12:16:12

标签: c# sql

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

请协助。

4 个答案:

答案 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以比较结果。