从C#代码将数据插入SQL Server

我有一个表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(); } } 

 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注入漏洞。

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

 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; } 

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

 insert into student(name) values('name') 

我遇到了这个问题,在尝试了堆栈溢出后发现的各种解决方案之后,我可以总结一下这样的经验:在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); 
 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(); 

尝试以下查询,

 insert into student(name) values(name) 

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

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

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

 create table table_name( id int PRIMARY KEY IDENTITY ) 

而且你不需要在插入查询中提到“id”