写入SQL Server数据库

时间:2014-08-27 05:24:38

标签: c# sql-server datagrid

我在将数据网格更改写入数据库时​​遇到问题,我正在尝试输入网格上的更改,然后当按下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语句。
  3. 我创建了自己的自定义SQL命令来手动插入到数据库中,因此它实际上正在工作:

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

    编辑1:

    感谢marc_s我设法实现某种插入,但我相信我需要将值部分修改为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();
    

1 个答案:

答案 0 :(得分:2)

让我们拿你的第一个代码示例。

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

你应该做的是从数据网格或类似网站获取数据集并存储该数据集 或者在第二个示例中开始执行,当您确认更新行时,从该行获取数据并构建对数据库的插入(或更新)查询。