如何使用C#语言在数据库中插入记录?

我只是C#的初学者,所以我需要太多的帮助。 现在的问题是我设计了一个窗口表单,其中有许多字段,如名字,姓氏,地址等。现在我想要做的是,当我填写表单并单击插入按钮时,所有信息都会进入数据库。 有谁知道这是怎么做到的吗?

private void button1_Click(object sender, System.EventArgs e) { string connetionString = null; SqlConnection cnn ; SqlDataAdapter adapter = new SqlDataAdapter(); string sql = null; connetionString = "Data Source=UMAIR;Initial Catalog=Air; Trusted_Connection=True;" ; cnn = new SqlConnection(connetionString); sql = "insert into Main (Firt Name, Last Name) values(textbox2.Text,textbox3.Text)"; try { cnn.Open(); adapter.InsertCommand = new SqlCommand(sql, cnn); adapter.InsertCommand.ExecuteNonQuery(); MessageBox.Show ("Row inserted !! "); } catch (Exception ex) { MessageBox.Show(ex.ToString()); } } 

您的查询中存在许多问题。
这是您的代码的修改版本

 string connetionString = null; string sql = null; connetionString = "Data Source=UMAIR;Initial Catalog=Air; Trusted_Connection=True;" ; using(SqlConnection cnn = new SqlConnection(connetionString)) { sql = "insert into Main ([Firt Name], [Last Name]) values(@first,@last)"; cnn.Open(); using(SqlCommand cmd = new SqlCommand(sql, cnn)) { cmd.Parameters.AddWithValue("@first", textbox2.text); cmd.Parameters.AddWithValue("@last", textbox3.text); cmd.ExecuteNonQuery(); MessageBox.Show ("Row inserted !! "); } } 
  • 列名称包含空格(应避免这样做),因此您需要使用方括号
  • 您需要使用using语句来确保关闭连接并释放资源
  • 您将控件直接放在字符串中,但这不起作用
  • 您需要使用参数化查询来避免引用问题和sqlinjiection攻击
  • 无需使用DataAdapter进行简单的插入查询

除此之外,还有其他潜在的问题。 如果用户没有在文本框控件中输入任何内容,该怎么办? 在尝试插入之前,您是否对此进行了任何检查? 正如我所说的,字段名称包含空格,这将给您的代码带来不便。 尝试更改这些字段名称。

编辑:如果您正在使用.NET Framework 1.1,那么您没有AddWithValue方法,所以用这些更改两个AddWithValue行

  cmd.Parameters.Add("@first", SqlDbType.NVarChar).Value = textbox2.text; cmd.Parameters.Add("@last", SqlDbType.NVarChar).Value = textbox3.text; 

此代码假定您的数据库列的类型为NVARCHAR,否则,请使用相应的SqlDbType枚举值。

请计划尽快切换到更新版本的.NET Framework。
1.1现在已经过时了。

您应该更改代码以使用SqlParameters并使您的insert语句适应以下内容

 string connetionString = "Data Source=UMAIR;Initial Catalog=Air; Trusted_Connection=True;" ; // [ ] required as your fields contain spaces!! string insStmt = "insert into Main ([First Name], [Last Name]) values (@firstName,@lastName)"; using (SqlConnection cnn = new SqlConnection(connetionString)) { cnn.Open(); SqlCommand insCmd = new SqlCommand(insStmt, cnn); // use sqlParameters to prevent sql injection! insCmd.Parameters.AddWithValue("@firstName", textbox2.Text); insCmd.Parameters.AddWithValue("@lastName", textbox3.Text); int affectedRows = insCmd.ExecuteNonQuery(); MessageBox.Show (affectedRows + " rows inserted!"); } 

使用参数化查询来防止Sql注入(安全问题)

使用using语句,以便关闭连接并处理资源。

 using(var connection = new SqlConnection("connectionString")) { connection.Open(); var sql = "INSERT INTO Main(FirstName, SecondName) VALUES(@FirstName, @SecondName)"; using(var cmd = new SqlCommand(sql, connection)) { cmd.Parameters.AddWithValue("@FirstName", txFirstName.Text); cmd.Parameters.AddWithValue("@SecondName", txSecondName.Text); cmd.ExecuteNonQuery(); } } 

您应该使用文本框的内容形成命令:

 sql = "insert into Main (Firt Name, Last Name) values(" + textbox2.Text + "," + textbox3.Text+ ")"; 

当然,这可以让您设法正确打开连接。

了解当前代码发生的情况会很有帮助。 如果您在该消息框中显示一些错误,那么知道它的含义会很棒。

您还应该在实际运行命令之前validation输入(即确保它们不包含恶意代码……)。

 sql = "insert into Main (Firt Name, Last Name) values(textbox2.Text,textbox3.Text)"; 

(Firt Name)不是有效字段。 它应该是FirstName或First_Name。 这可能是你的问题。