插入自动增量

时间:2014-03-17 03:36:44

标签: c# mysql

我有一个方法Insert()。除了自动增量之外,一切都按预期工作。这是代码:

public void Insert(string m1,int y1,int new_count)
    {
        string query = "INSERT INTO page_counter (id,month,year,page_count) VALUES('','"+m1+"',"+y1+","+new_count+")";

            //create command and assign the query and connection from the constructor
            MySqlCommand cmd = new MySqlCommand(query, connection);

            //Execute command
            cmd.ExecuteNonQuery();

            //close connection
            this.CloseConnection();
    }  

我的Id列是自动增量。所以我的问题是如何在数据库中插入值,继续表中id的自动增量?

6 个答案:

答案 0 :(得分:3)

只需不指定id的值:

string query = "INSERT INTO page_counter (month,year,page_count) VALUES('"+m1+"',"+y1+","+new_count+")";

并研究更好的方法,参数化查询,而不是连接查询字符串。

答案 1 :(得分:3)

您所要做的就是从插入中排除自动递增的IDENTITY列。

将您的query更改为:

//NOTE: We leave the "id" column out of the insert, SQL Server will handle this automatically
string query = "INSERT INTO page_counter (month, year, page_count) VALUES (@Month, @Year, @PageCount)";

SQL将处理ID字段。

您可能会注意到我在查询中使用了标量变量。您可以(并且应该)在命令中分配这些内容,以便排除SQL注入的可能性:

由于来自MySql.Data.MySqlClient PRE 4.0的事实编辑

MySqlCommand cmd = new MySqlCommand(query, connection);

cmd.Parameters.Add(new MySqlParameter("@Month", m1));
cmd.Parameters.Add(new MySqlParameter("@Year", y1));
cmd.Parameters.Add(new MySqlParameter("@PageCount", new_count));

//Execute the INSERT
cmd.ExecuteNonQuery();

关于SQL注入的一些背景,我建议阅读:

  1. SQL Injection on W3Schools
  2. Why use Parameterized SQL on SO

答案 2 :(得分:2)

Using AUTO_INCREMENT

没有为AUTO_INCREMENT列指定值,因此MySQL会自动分配序列号。

string query = "INSERT INTO page_counter (month,year,page_count)
VALUES('"+m1+"',"+y1+","+new_count+")";

您始终可以使用参数化查询来避免SQL Injection

string query = "INSERT INTO page_counter (month,year,page_count)
VALUES(@month,@year,@page_count)";

cmd.Parameters.AddWithValue("@month",Value1);
cmd.Parameters.AddWithValue("@year", Value2);
cmd.Parameters.AddWithValue("@page_count", Value3);

答案 3 :(得分:1)

string query = "INSERT INTO page_counter (month,year,page_count) VALUES('"+m1+"',"+y1+","+new_count+")";

http://dev.mysql.com/doc/refman/5.0/en/example-auto-increment.html

答案 4 :(得分:1)

您可以更改数据库中的ID标识

"INSERT INTO page_counter (month,year,page_count) VALUES('"+m1+"',"+y1+","+new_count+")"

答案 5 :(得分:1)

请勿在此处指定ID:

如果您使用的是SQL Server,请在数据库中创建ID字段,如下所示:

ID int IDENTITY(1,1) PRIMARY KEY

如果MySQL那么:

ID int NOT NULL AUTO_INCREMENT

请看以下链接: http://www.w3schools.com/sql/sql_autoincrement.asp