繁体   English   中英

写入SQL Server数据库

[英]Writing to SQL Server Database

我在将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语句。

我制作了自己的自定义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();

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

看一下最后3行,您要做的第一件事是从表Cars中复制数据并将其存储到名为dt的DataSet中。
然后将此数据集存储回数据库后,无需实际进行任何更改。 如果点网足够聪明,它将不会执行任何操作,因为您在填充和更新调用之间未进行任何更改。

您可能应该做的是从datagrid或类似的数据库中获取数据集并存储该数据集。
或按照第二个示例中的步骤进行操作,当您确定行已更新时,从该行中获取数据并构造对数据库的插入(或更新)查询。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM