4

我有一张桌子studentid, name)。然后我有一个文本框,用于输入名称,当单击提交按钮时,它将数据插入数据库。那么我怎样才能只插入名称,而不是 id,因为 id 是自动递增的?

我试过这个

insert into student(id, name) values(,name) 

但它没有插入我的桌子。

这是我的代码:

protected void Button1_Click(object sender, EventArgs e)
{
    string test = txtName.Text;

    SqlConnection conn = new SqlConnection(@"Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\Person.mdf;Integrated Security=True;User Instance=True");

    string sql = "insert into student(name) values ('test')";

    try
    {
        conn.Open();
        SqlCommand cmd = new SqlCommand(sql, conn);
        cmd.ExecuteNonQuery();
    }
    catch (System.Data.SqlClient.SqlException ex)
    {
        string msg = "Insert Error:";
        msg += ex.Message;
    }
    finally
    {
        conn.Close();
    }
}
4

7 回答 7

17
INSERT INTO student (name) values ('name')

完全省略该id列,它将自动填充。要使用您的变量,您应该参数化您的 SQL 查询。

string sql = "INSERT INTO student (name) values (@name)";
conn.Open();
SqlCommand cmd = new SqlCommand(sql, conn);
cmd.Parameters.Add("@name", SqlDbType.VarChar);
cmd.Parameters["@name"].Value = test;
cmd.ExecuteNonQuery();

您永远不应尝试通过构造包含输入值的 SQL 字符串来执行此操作,因为这会使您的代码暴露于 SQL 注入漏洞。

于 2012-06-14T09:25:56.133 回答
2

插入数据时最好使用参数。

try
{
    string sql = "insert into student(name) values (@name)";
    using (SqlConnection conn = new SqlConnection(connectionString))
    {
        conn.Open();
        using (SqlCommand cmd = new SqlCommand(sql, conn))
        {
            cmd.Parameters.AddWithValue("@name", test); // assign value to parameter 
            cmd.ExecuteNonQuery();
        }
    }
}
catch (SqlException ex)
{
    string msg = "Insert Error:";
    msg += ex.Message;
}
于 2012-06-14T09:45:30.980 回答
1

您无需在第一部分提及 ID。

insert into student(name) values('name') 
于 2012-06-14T09:26:02.160 回答
1
string sql = "INSERT INTO student (name) values (@name)";
conn.Open();
SqlCommand cmd = new SqlCommand(sql, conn);
cmd.Parameters.Add("@name", SqlDbType.VarChar);
cmd.Parameters["@name"].Value = test;
cmd.ExecuteNonQuery();
于 2012-06-14T11:06:45.793 回答
1

我遇到了这个问题,在尝试了堆栈溢出时发现的各种解决方案后,我可以将经验总结如下:在 mssql 的命令 shell 中执行的命令如下:

insert into table_name (val1,val2,val3,val4) VALUES ("val1","val2",0,"val4")

go

或者

insert into table_name VALUES ("val1","val2",0,"val4")

go

直接在 mssql 数据库提示符中键入时工作,

但是当需要使用 c# 中的 insert 语句时,需要记住,字符串需要被一对额外的单句包围,围绕字符串,例如:

SqlConnection cnn;

string connetionString = "Data Source=server_name;Initial Catalog=database_name;User ID=User_ID;Password=Pass_word";

cnn = new SqlConnection(connetionString);

SqlCommand myCommand = new SqlCommand("insert into table_name (val1,val2,val3,val4) VALUES ('val1','val2',0,'val4');", cnn);

//or
//SqlCommand myCommand = new SqlCommand(insert into table_name VALUES ('val1','val2',0,'val4');", cnn);

cnn.Open();

myCommand.ExecuteNonQuery();

cnn.Close();

这里的问题是,像我这样的大多数人都尝试使用 <\"> 代替双引号 <">,这在上述命令行案例中实现,而 SQL 执行器无法理解其含义。

即使在需要替换字符串的情况下,也要确保字符串被单引号包围,其中字符串连接看起来是一种可行的解决方案,例如:

SqlCommand myCommand = new SqlCommand("insert into table_name (val1,val2,val3,val4) VALUES ('"+val1+"','val2',0,'val4');", cnn);
于 2013-01-17T04:11:32.883 回答
0

尝试以下查询,

insert into student(name) values(name) 

当您插入数据时,SQL Server 在内部自动递增 id 列,因为您说它是自动递增的。如果它不起作用,你必须检查数据库中的标识列。

于 2012-06-14T09:26:50.597 回答
0

使用关键字“identity”自动增加 id 列

参考:http ://technet.microsoft.com/en-us/library/aa933196(v=sql.80).aspx

create table table_name( id int PRIMARY KEY IDENTITY ) 

并且您无需在插入查询中提及“id”

于 2013-10-22T09:06:08.903 回答