【问题标题】:Failed to convert parameter value from a SqlParameter to a String无法将参数值从 SqlParameter 转换为字符串
【发布时间】:2014-02-19 05:47:43
【问题描述】:

您好,我已阅读所有以前的类似问题,但无法正常工作

SqlParameter[] param = new SqlParameter[1];
param[0] = new SqlParameter("@Lot", SqlDbType.NChar, 112);
param[0].Value = "Bob123457";
DataSet ds1 = db.ExecuteDataSet("Getmagesbylot2", param );

我的存储过程正在寻找一个 nchar (112) 作为参数 我试过带引号和不带引号以及单引号

【问题讨论】:

  • 您是否收到 SqlException 或其他问题?我不是这类东西的专家,但会假设因为你的字段是 nchar(112),所以你的 Bob123457 的值没有足够的字符,而不是 nvarchar(112),它允许少于 112字符。
  • @Damith ExecuteDataSet 是企业库的一部分。但是,是的,SP 会有所帮助。

标签: c# stored-procedures


【解决方案1】:

ExecuteDataSet 调用采用实际参数值,而不是 SqlParameter 对象。将其更改为简单地执行:

var ds1 = db.ExecuteDataSet("Getmagesbylot2", "Bob123457");

您可能还想检查 SP 的拼写是否正确,也许应该是 GetImagesByLot2

【讨论】:

  • 感谢 tvanfosson,但如果我想传递超过 1 个参数,它会变得很乱,而且我在两个地方都拼错了,所以至少我是一致的
  • @user3326577 但该方法采用对象的参数数组。您需要按照方法预期的方式传递这些参数。只需根据需要将附加参数添加到方法调用中。
【解决方案2】:

使用这个

    SqlParameter[] param = new SqlParameter[1];
    param[0] = new SqlParameter("@Lot", SqlDbType.VarChar, 112);
    param[0].Value = "Bob123457";

    DataSet ds1 = db.ExecuteDataSet("Getmagesbylot2", param );

OR

    SqlParameter[] param = new SqlParameter[1];
    param[0] = new SqlParameter("@Lot", SqlDbType.NVarChar, 112);
    param[0].Value = "Bob123457";

    DataSet ds1 = db.ExecuteDataSet("Getmagesbylot2", param );

【讨论】:

  • 我们还不知道 OP 的字段(在实际数据库中)是否是 nchar 或 varchar 或 nvarchar 或其他内容
  • 该字段是 nchar,我尝试了这两个建议,但仍然得到相同的错误 无法将参数值从 SqlParameter 转换为字符串。
  • -- 在此处添加存储过程的参数 @lot nchar (112) AS BEGIN -- 添加 SET NOCOUNT ON 以防止额外的结果集 -- 干扰 SELECT 语句。设置无计数; -- 在此处插入过程语句 SELECT TOP 1000 [Lot] ,[Date] FROM [Db].[dbo].[Material] where lot= @lot;结束
猜你喜欢
  • 2012-09-30
  • 2012-08-16
  • 2016-02-14
  • 1970-01-01
  • 1970-01-01
  • 2017-01-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多