【问题标题】:How to insert data to a database in C#如何在 C# 中向数据库中插入数据
【发布时间】:2019-08-11 07:56:57
【问题描述】:

我刚刚开始学习数据库,实际上我不知道为什么下面的代码不起作用。我已经搜索了很多,但我没有意识到到底发生了什么。

我有一个 Windows 窗体应用程序,其中有一个 textbox 和一个 button。当我点击按钮时,textbox 中的文本应该会插入到数据库中,但实际上没有发生任何事情。

我使用 Visual Studio 创建了数据库。我在 Visual Studio 2019 社区版的服务器资源管理器中右键单击“数据连接”,然后单击“创建新的 SQL Server 数据库”。

using (SqlConnection con = new SqlConnection("Data Source = (localdb)\\mssqllocaldb; Initial Catalog = myTestDB; Integrated Security = True; Pooling = False")) 
{
    con.Open();

    SqlCommand cmd = new SqlCommand("INSER INTO [tesTable] VALUES (@fname, @lname)", con);

    cmd.Parameters.AddWithValue("@fname", textBox1.Text);
    cmd.Parameters.AddWithValue("@lname", textBox2.Text);
}

MessageBox.Show("done!");

【问题讨论】:

  • 在数据库端发生任何事情之前需要执行命令。附带说明一下,您使用了 INSERT 命令,但未命名所涉及的列。这要求数据库表具有完全相同的列数,并且与添加参数的顺序完全相同
  • 我建议在执行查询后检查查询 Sql Profiler,以了解正在执行的确切查询。
  • 您应该查看Can we stop using AddWithValue() already? 并停止使用.AddWithValue() - 它可能会导致意想不到和令人惊讶的结果...

标签: c# sql-server winforms ado.net sql-insert


【解决方案1】:

因为你还没有执行你的命令:

....
cmd.Parameters.AddWithValue("@lname", textBox2.Text);

cmd.ExecuteNonQuery();

insert 语句的固定版本应该是这样的:

"INSERT INTO tesTable (fname,lname) VALUES (@fname,@lname)"

这也需要补充一下,直接指定类型,使用Value属性比AddWithValue好:

cmd.Parameters.Add("@lname", SqlDbType.VarChar).Value = textBox2.Text;

Can we stop using AddWithValue() already?

【讨论】:

  • 我做到了,但在添加 cmd.ExecuteNonQuery();:System.Data.SqlClient.SqlException: '关键字'INTO'附近的语法不正确。'
  • 是的,正好两列。
  • @kiarashyoosefi 如果你试试这个:INSERT INTO tesTable (fname,lname) VALUES (@fname,@lname) 会怎样?只需确保 sql 中的列也是 fnamelname
  • 注意 INSER INTO 的错字,缺少 T...:-)
  • 另外,tesTable 似乎很可疑。可能是 OP 的 T 键出现故障。
猜你喜欢
  • 2020-10-03
  • 1970-01-01
  • 1970-01-01
  • 2023-03-14
  • 2014-11-04
  • 1970-01-01
  • 2021-04-09
  • 1970-01-01
  • 2012-11-16
相关资源
最近更新 更多