无法将参数值从 SqlParameter 转换为字符串

Posted

技术标签:

【中文标题】无法将参数值从 SqlParameter 转换为字符串【英文标题】:Failed to convert parameter value from a SqlParameter to a String 【发布时间】: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 会有所帮助。 【参考方案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;结束

以上是关于无法将参数值从 SqlParameter 转换为字符串的主要内容,如果未能解决你的问题,请参考以下文章

为啥我需要一个局部变量来将 SqlParameter 中的值从 Ajax 存储到 WCF 方法

TimeStamp , "将参数值从 DateTime 转换为 Byte[] 失败。"

将DBNull传递给SqlParameter时出错

无法将值从因子转换为仅数字

将参数值从字符串转换为日期时间失败

将实体类/匿名对象转换为SqlParameter列表