【问题标题】:Inserting record in to MySQL Database using C#使用 C# 将记录插入 MySQL 数据库
【发布时间】:2011-02-16 19:54:36
【问题描述】:

我目前正在使用 C# WPF 开发应用程序。我正在尝试将数据存储到 MySQL 数据库中。下面是我的代码。

 MySqlCommand cmd = new MySqlCommand("", conn);

                cmd.CommandText = "INSERT INTO BUG_REPORTS (bug_softwareID, bug_firstName, bug_lastName, bug_email, bug_description, bug_ip_addr, bug_dateReported) "
                    + "VALUES (@softwareID, @firstName, @lastName, @email, @description, @ip_addr, @dateReported)";

                cmd.Parameters.Add("@softwareID");
                cmd.Parameters.Add("@firstName");
                cmd.Parameters.Add("@lastName");
                cmd.Parameters.Add("@email");
                cmd.Parameters.Add("@description");
                cmd.Parameters.Add("@ip_addr");
                cmd.Parameters.Add("@dateReported");

                cmd.Parameters["@softwareID"].Value = softwareID;
                cmd.Parameters["@firstName"].Value = getFirstName();
                cmd.Parameters["@lastName"].Value = getLastName();
                cmd.Parameters["@email"].Value = getEmail();
                cmd.Parameters["@description"].Value = getDescription();
                cmd.Parameters["@ip_addr"].Value = ip_addr;
                cmd.Parameters["@dateReported"].Value = date;

                cmd.ExecuteNonQuery();

每次我尝试插入一条记录时,都会出现错误“只能存储 MySQLParameter 对象。我究竟做错了什么。我找到了文章,一切似乎都很好。

感谢您提供的任何帮助

【问题讨论】:

    标签: c# mysql


    【解决方案1】:

    在您的参数中尝试:

    cmd.Parameters.Add(new OdbcParameter("@softwareID", softwareID));
    

    你的其余参数以此类推。

    老实说,构建您的 sql 内联并执行不带参数的命令可能同样简单,除非您不验证文本并且担心注入攻击。

    【讨论】:

    • 您好,感谢您的帮助。我已经开始工作了,但与您建议的方式不太一样,但回答确实对我有所帮助。我没有使用 Odbc,所以我忽略了它现在提出的 OdbcParameter 已弃用并提出了一些不同的建议。所以我使用了 cmd.Parameters.AddWithValues("@softwareID", softwareID));
    【解决方案2】:

    我不确定它是否直接转换,但是当我想使用 T-SQL 插入或更新表时,我使用 .ExecuteScalar()。

    【讨论】:

    • ExecuteNonQuery() 是调用 INSERT 或 UPDATE 的正确方法。 ExecuteScalar() 用于返回单个值(如计数)或读取返回的第一行的第一列。
    • @womp - 我不知道。谢谢!
    【解决方案3】:

    你试过用这种风格吗?它更紧凑,可能会解决您的问题。

    cmd.Parameters.Add("@softwareID",softwareID);
    cmd.Parameters.Add("@firstName",getFirstName());
    cmd.Parameters.Add("@lastName",getLastName());
    cmd.Parameters.Add("@email",getEmail());
    cmd.Parameters.Add("@description",getDescription());
    cmd.Parameters.Add("@ip_addr",ip_addr);
    cmd.Parameters.Add("@dateReported",date);
    cmd.ExecuteNonQuery();
    

    【讨论】:

    • 是的,我确实尝试过,但 Visual Studio 说 add 已被弃用,而是使用 addwithvalues
    【解决方案4】:

    MySql .NET 连接器的参数标识符是'?'。

    所以你必须使用下面的代码:

    cmd.CommandText = "INSERT INTO BUG_REPORTS (bug_softwareID, bug_firstName, bug_lastName, bug_email, bug_description, bug_ip_addr, bug_dateReported) "
                            + "VALUES (?softwareID, ?firstName, ?lastName, ?email, ?description, ?ip_addr, ?dateReported)";
    
    cmd.Parameters.Add("?softwareID");
    cmd.Parameters.Add("?firstName");
    cmd.Parameters.Add("?lastName");
    cmd.Parameters.Add("?email");
    cmd.Parameters.Add("?description");
    cmd.Parameters.Add("?ip_addr");
    cmd.Parameters.Add("?dateReported");
    
    cmd.Parameters["?softwareID"].Value = softwareID;
    cmd.Parameters["?firstName"].Value = getFirstName();
    cmd.Parameters["?lastName"].Value = getLastName();
    cmd.Parameters["?email"].Value = getEmail();
    cmd.Parameters["?description"].Value = getDescription();
    cmd.Parameters["?ip_addr"].Value = ip_addr;
    cmd.Parameters["?dateReported"].Value = date;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-05-21
      • 2014-01-29
      • 1970-01-01
      • 2013-11-23
      • 1970-01-01
      • 2012-03-10
      • 2015-09-04
      相关资源
      最近更新 更多