为了账号安全,请及时绑定邮箱和手机立即绑定

执行存储过程对添加参数不起作用

执行存储过程对添加参数不起作用

C#
烙印99 2021-11-21 11:05:33
在 T-SQL 中,我有一个这样的 exec:    EXEC [dbo].[usp_TaskStatus_Time_Calculation_Final]        @EmployeeGuidIdTableType = @EmployeeGuidIdTableType,        @StartingDate = '2018-08-02 00:00:00.000',        @EndingDate = '2018-08-08 00:00:00.000'它工作正常,参数正常工作,所以我想在 C# 中重现它,我这样做:public DataTable ExeSQLParamAndType(string SprocName, DataTable paramArray, string tableTypeName, string parameters = null){    SqlCommand cmd = new SqlCommand(SprocName, this.dbconn);    cmd.CommandType = CommandType.StoredProcedure;    cmd.Parameters.Add(new SqlParameter(tableTypeName, SqlDbType.Structured));    cmd.Parameters[tableTypeName].Value = paramArray;    cmd.Parameters.Add(new SqlParameter(parameters, SqlDbType.NVarChar));    DataTable tbl = new DataTable("Table1")        {            Locale = System.Globalization.CultureInfo.InvariantCulture        };    SqlDataAdapter da = new SqlDataAdapter(cmd);    try    {        da.Fill(tbl);    }    catch (SqlException e)    {        this.HandleSQLError(e, "GetTableBySQL", SprocName);    }    finally    {        cmd.Dispose();    }    return tbl;}执行方法:db.ExeSQLParamAndType("StoredProcedureCalc", parameters,                      "@EmployeeGuidIdTableType",                      $"@StartingDate = '{startDate}', @EndingDate = '{endDate}'");尝试在线传递StaringDate和EndingDate参数 时出现异常this.HandleSQLError(e, "GetTableBySQL", SprocName);@StartingDate = ''2018-08-02 00:00:00.000'', @EndingDate = ''2018-08-08 00:00:00.000'' 不是过程 StoredProcedureCalc 的参数有人看到那里有问题吗?
查看完整描述

2 回答

?
MM们

TA贡献1886条经验 获得超2个赞

问题是因为


cmd.Parameters.Add(new SqlParameter(parameters, SqlDbType.NVarChar));

正在创建一个参数,其名称为变量parameters中保存的任何值,即字符串值,"@StartingDate = '{startDate}', @EndingDate = '{endDate}'"因为这是您ExeSQLParamAndType使用以下代码传递的内容:


db.ExeSQLParamAndType("StoredProcedureCalc"

, parameters

, "@EmployeeGuidIdTableType"

,$"@StartingDate = '{startDate}', @EndingDate = '{endDate}'");

你需要创建两个参数,一个叫startDate,一个叫EndDate


cmd.Parameters.Add(new SqlParameter(startingDate, SqlDbType.NVarChar));

cmd.Parameters.Add(new SqlParameter(EndingDate , SqlDbType.NVarChar));


查看完整回答
反对 回复 2021-11-21
?
弑天下

TA贡献1818条经验 获得超8个赞

C# DateTime 和 SQL Server DateTime 不兼容。您必须更改 SQL 表中的设置以使用 Datetime2 而不是 DateTime。您可以通过直接向数据库中带有 Datetime 字段的每个表发出 ALTER 语句或在 DbContext 类中添加一行命令来告诉实体框架专门为使用 DateTime 的所有类使用“datetime2”来实现此目的。


查看完整回答
反对 回复 2021-11-21
  • 2 回答
  • 0 关注
  • 149 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信