【问题标题】:Only MySqlParameter objects may be stored (C#)只能存储 MySqlParameter 对象(C#)
【发布时间】:2017-08-11 07:47:13
【问题描述】:

我研究了这个问题,但没有得到切实的解决方案。供您参考,我使用我们的通用库类进行连接,从未遇到过这样的问题。而且我想说的是,该项目在我的本地 PC 上成功运行,但在服务器上却没有。

这是我收到错误的代码片段:

    queue_tablename = tablename;

    conn = myconn;
    writecomm = conn.CreateCommand();
    writecomm.CommandText = "insert into "+tablename+" (id,mtype,channel,dt,fromnumber,tonumber,smstext)" +
        "values (?id,?mtype,?channel,?dt,?fromnumber,?tonumber,?smstext)";
    writecomm.Parameters.Add(new MySqlParameter("id", MySqlDbType.Int64));
    writecomm.Parameters.Add(new MySqlParameter("mtype", MySqlDbType.VarChar));
    writecomm.Parameters.Add(new MySqlParameter("channel", MySqlDbType.VarChar));
    writecomm.Parameters.Add(new MySqlParameter("dt", MySqlDbType.DateTime));
    writecomm.Parameters.Add(new MySqlParameter("fromnumber", MySqlDbType.VarChar));
    writecomm.Parameters.Add(new MySqlParameter("tonumber", MySqlDbType.VarChar));
    writecomm.Parameters.Add(new MySqlParameter("smstext", MySqlDbType.VarChar));

这行抛出异常:

writecomm.Parameters.Add(new MySqlParameter("id", MySqlDbType.Int64));

“MySql.Data.MySqlClient.MySqlException”类型的未处理异常 发生在MySql.Data.dll

附加信息:只能存储 MySqlParameter 对象

【问题讨论】:

  • 添加参数时应该是?id而不是id
  • 您在声明 MySqlParameter 时错过了问号参数 sigil (?)。在参数名称前添加标记并重试,或使用 .NET 版本的查询参数作为 @
  • 尝试使用 '@' 而不是 '?'。
  • 我说这是我们通用的连接库。现在很多项目都使用它没有问题。在声明参数时还尝试使用?@。他们都没有帮助我。
  • 那段代码是mysql的默认库。。更别说是你的队友创建的。我什至不再使用? 那个标志了。现在,如果它正在工作,请继续。

标签: c# mysql ado.net mysql-connector


【解决方案1】:

我解决了这个问题,希望对尝试了以上解决方法但无法解决的人有所帮助。

发生异常是因为我的连接库使用 MySql.Data.dll 版本 6.2.2.2 但我添加了 6.9.9.0 的引用.更改您的 MySql.Data 引用,它将对您有所帮助。

就我而言,我的公司有另一个适用于 6.9.9.0 版本的连接库。这就是为什么,我用的是新的,一切都很好。

【讨论】:

    【解决方案2】:

    试试这个,

    Change `?` to `@` in your command text and,
    

    像这样添加参数,

    writecomm.Parameters.Add("@id", MySqlDbType.Int64).Value = ParameterValue;
    

    writecomm.Parameters.Add(new MySqlParameter
                {
                    ParameterName = "@id",
                    MySqlDbType = MySqlDbType.Int64,
                    Value=ParameterValue
                });
    

    【讨论】:

    • 也许因为这个I said that this is our general connection library. And a lot of projects use it now without a problem. Also tried to use ? and @ when declaring parameter. None of them helps me.而这不起作用@
    猜你喜欢
    • 1970-01-01
    • 2011-03-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多