正在写入SQL Server数据库

本文关键字:Server 数据库 SQL | 更新日期: 2023-09-27 18:19:29

我在将数据网格更改写入数据库时遇到问题,我正在尝试在网格上键入更改,然后当按下Button_Add_Car时,我执行此代码并将更改写入数据库,但没有任何内容写入数据库。

private void Button_Add_Car(object sender, RoutedEventArgs e)
    {
        SqlConnection cn = new SqlConnection();
        DataSet dt = new DataSet();
        SqlDataAdapter da;
        SqlCommandBuilder cmdBuilder;
        cn.ConnectionString = (String.Format("Data Source={0};Initial Catalog={1};Persist Security Info=True;User ID={2};Password={3}", SQLFunctions.connectSQL.SQLSERVER_ID, SQLFunctions.connectSQL.SQLDatabaseName, SQLFunctions.connectSQL.SQLServerLoginName, SQLFunctions.connectSQL.SQLServerPassword));
        cn.Open();
        da = new SqlDataAdapter("SELECT * FROM Cars", cn);
        cmdBuilder = new SqlCommandBuilder(da);
        da.Fill(dt);
        da.Update(dt);
        cn.Close();
}
  1. 我使用这种方法是否正确
  2. 我使用的SQL查询是否正确?我在SELECT和INSERT之间感到困惑,因为我发现了一些例子,人们使用它们来实现我想要做的事情。我当然应该使用INSERT语句

我制作了自己的自定义SQL命令来手动插入数据库,因此它实际上可以工作:

SQLCmd("INSERT INTO Cars (Date, Time) VALUES(2014-10-10, '12:00:00')");

编辑1:

多亏了marc_s,我成功地实现了某种插入,但我认为我需要将value部分修改为IF语句内部,IF语句将检查它是否为null,并将值改回cr.Date和cr.Time,因为我正在使用列表。我不确定如何以这种方式使用if语句,因为它目前正在输入空白行,尽管这是朝着正确的方向迈出的一步:

        CarRecord cr = new CarRecord();
        carRecords.Add(cr);
        SqlConnection con = new SqlConnection(String.Format(@"Data Source={0};Initial Catalog={1};Persist Security Info=True;User ID={2};Password={3}", SQLFunctions.connectSQL.SQLSERVER_ID, SQLFunctions.connectSQL.SQLDatabaseName, SQLFunctions.connectSQL.SQLServerLoginName, SQLFunctions.connectSQL.SQLServerPassword));
        con.Open();
        SqlCommand comm = new SqlCommand("INSERT INTO Cars VALUES (@Date, @Time)", con);
        SqlDataAdapter da = new SqlDataAdapter(comm);
        da.SelectCommand.Parameters.Add(new SqlParameter("@Date", SqlDbType.NVarChar)).Value = DBNull.Value;
        da.SelectCommand.Parameters.Add(new SqlParameter("@Time", SqlDbType.NVarChar)).Value = DBNull.Value;
        da.SelectCommand.ExecuteNonQuery();
        DataTable dt = new DataTable();     
        SqlCommandBuilder builder = new SqlCommandBuilder(da);
        da.Update(dt);
        con.Close();

正在写入SQL Server数据库

让我们以您的第一个代码示例为例。

看看最后3行,首先要做的是从Cars表中复制数据,并将其存储到名为dt的DataSet中
然后在您将该数据集存储回数据库后立即执行,而无需实际进行任何更改。如果dotnet足够聪明,它不会做任何事情,因为你在填充和更新调用之间没有更改任何内容。

您可能应该做的是从数据网格或类似的地方获取数据集,然后存储该数据集
或者像您在第二个示例中开始的那样,当您标识某行已更新时,从该行获取数据并构造对数据库的插入(或更新)查询。