1

我正在使用 MySQL ODBC 将数据插入到 MySQL 表中。表中的第一列是一个 int 类型和自动递增的 ID。当我为第一行插入数据时,@ReqID 的值应该是什么,如下所示?另外,我如何确保后续执行对 ID 自动递增?

这是C#:

            string conString = WebConfigurationManager.ConnectionStrings["mysql"].ConnectionString;
        using (OdbcConnection con = new OdbcConnection(conString))
        {
            con.Open();
            using (OdbcCommand cmd = con.CreateCommand()) {
                cmd.CommandText = "INSERT INTO GraphicsRequest (RequestID, Graphic1Desc, Graphic2Desc, Graphic3Desc, ColorChart, Hex1, Hex2, Hex3, Hex4) VALUES (@reqID, @g1d, @g2d, @g3d, @colorChart, @hex1, @hex2, @hex3, @hex4)";
                cmd.Parameters.AddWithValue("@reqID", 1);
                cmd.Parameters.AddWithValue("@g1d", txtGraphic1Desc.Text);
                cmd.Parameters.AddWithValue("@g2d", txtGraphic2Desc.Text);
                cmd.Parameters.AddWithValue("@g3d", txtGraphic3Desc.Text);

                cmd.Parameters.AddWithValue("@colorChart", ddlColorChart.SelectedValue);
                cmd.Parameters.AddWithValue("@hex1", lblColor1.Text);
                cmd.Parameters.AddWithValue("@hex2", lblColor2.Text);
                cmd.Parameters.AddWithValue("@hex3", lblColor3.Text);
                cmd.Parameters.AddWithValue("@hex4", lblColor4.Text);
                cmd.ExecuteNonQuery();
            }
        }
4

3 回答 3

3

在 MySQL 中,如果要使用数据库本身的自动递增功能,则不应在 INSERT 期间提供 ID 字段。

所以这就是你的情况。

        string conString = WebConfigurationManager.ConnectionStrings["mysql"].ConnectionString;
    using (OdbcConnection con = new OdbcConnection(conString))
    {
        con.Open();
        using (OdbcCommand cmd = con.CreateCommand()) {
            cmd.CommandText = "INSERT INTO GraphicsRequest (Graphic1Desc, Graphic2Desc, Graphic3Desc, ColorChart, Hex1, Hex2, Hex3, Hex4) VALUES (@g1d, @g2d, @g3d, @colorChart, @hex1, @hex2, @hex3, @hex4)";
            cmd.Parameters.AddWithValue("@g1d", txtGraphic1Desc.Text);
            cmd.Parameters.AddWithValue("@g2d", txtGraphic2Desc.Text);
            cmd.Parameters.AddWithValue("@g3d", txtGraphic3Desc.Text);

            cmd.Parameters.AddWithValue("@colorChart", ddlColorChart.SelectedValue);
            cmd.Parameters.AddWithValue("@hex1", lblColor1.Text);
            cmd.Parameters.AddWithValue("@hex2", lblColor2.Text);
            cmd.Parameters.AddWithValue("@hex3", lblColor3.Text);
            cmd.Parameters.AddWithValue("@hex4", lblColor4.Text);
            cmd.ExecuteNonQuery();
        }
    }

这样,数据库将插入一个新行,其中包含下一个可用的 ID。

于 2013-03-13T18:08:30.773 回答
0

由于其他人已经回答了您的问题,我建议您在项目中使用 MySQL 连接器,而不是使用 OLEDB 对象。下载并安装 MySQL 连接器,然后在您的项目中添加对 MySQL.Data 扩展的引用,然后将 MySql.Data.MySqlClient using 语句添加到您的类中,然后按如下方式更新您的代码:

string conString = WebConfigurationManager.ConnectionStrings["mysql"].ConnectionString;
using(MySqlConnection con = new MySqlConnection(connectionString))
{
     con.Open();
     using(MySqlCommand cmd = new MySqlCommand() 
     {
            cmd.Connection = con; //<-- It looks like you are missing this line in your code
            cmd.CommandText = "INSERT INTO GraphicsRequest (Graphic1Desc, Graphic2Desc, Graphic3Desc, ColorChart, Hex1, Hex2, Hex3, Hex4) VALUES (@g1d, @g2d, @g3d, @colorChart, @hex1, @hex2, @hex3, @hex4)";
            cmd.Parameters.AddWithValue("@g1d", txtGraphic1Desc.Text);
            cmd.Parameters.AddWithValue("@g2d", txtGraphic2Desc.Text);
            cmd.Parameters.AddWithValue("@g3d", txtGraphic3Desc.Text);
            cmd.Parameters.AddWithValue("@colorChart", ddlColorChart.SelectedValue);
            cmd.Parameters.AddWithValue("@hex1", lblColor1.Text);
            cmd.Parameters.AddWithValue("@hex2", lblColor2.Text);
            cmd.Parameters.AddWithValue("@hex3", lblColor3.Text);
            cmd.Parameters.AddWithValue("@hex4", lblColor4.Text);
            cmd.ExecuteNonQuery();
     }
}
于 2013-03-13T18:25:33.667 回答
0

可能这会解决问题。

strong textcom.ExecuteNonQuery();
long id = com.LastInsertedId;
于 2016-06-04T09:01:57.063 回答