我有一张表student
(id, 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();
}
}
答案 0 :(得分:16)
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注入漏洞。
答案 1 :(得分: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;
}
答案 2 :(得分:1)
您无需在第一部分提及ID。
insert into student(name) values('name')
答案 3 :(得分: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();
答案 4 :(得分: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语句时,需要记住的是,字符串需要在字符串周围附加一对单个quite,如:
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);
答案 5 :(得分:0)
尝试以下查询
insert into student(name) values(name)
当你插入数据时,SQL Server在内部自动增加id列,因为你说它是自动增量。如果它不起作用,你必须检查数据库中的标识列。
答案 6 :(得分: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”