0

我是 SQL 新手(从今天开始),当数据库中的表具有第一列作为自动生成数字即 (IDENTITY (1,1)) 时,如何将数据集的数据添加到数据库表中

我有这样的数据集

  name    age    location

   x      30       yyy
   y      20       ppp

数据库中的表是这样的

  Id(auto)   name    age    location

  --------  no data  --------------

首先,我从数据库表中填充数据集。
由于第一列是自动生成的,我什至无法向 DataSet 添加新值。如果我说

 dsMainDoctors.Tables[0].Rows.Add( /* first column is autogenerated so I am leaving it*/
                secondColumn,
                thirdColumn,
                fourthColumn,
                FifthColumn);

错误 --> 输入字符串的格式不正确。无法存储在 Doctor_ID 列中。预期类型是 Int32。

我正在尝试的代码是:(当我在 DataSet 中手动给出第一列值时

        SqlConnection conn = new SqlConnection(strConn);
        SqlCommand cmd = new SqlCommand(strQuery, conn);
        SqlDataAdapter da = new SqlDataAdapter(cmd);
        conn.Open();
        da.Update(ds.Tables[0]);  //ERROR :- Update requires a valid InsertCommand when passed DataRow collection with new rows.
        conn.Close();
        conn.Dispose();
        cmd.Dispose();

 strQuery --> "delete from [dbo].[" + table_name + "]";

我可以在询问之前搜索过这个,但我不知道我应该使用什么关键字
如果这是一个非常简单的问题,请在评论中回答。

4

2 回答 2

1

为了使用结果更新表,您DataTable必须配置SqlDataAdapter类的SelectCommand、和属性(SqlCommand 对象) 。DeleteCommandInsertCommandUpdateCommand

于 2012-11-02T10:57:37.963 回答
1

好的,以下代码将为您正确构建该 INSERT 命令。另外,请注意,如果您担心处理对象,请改用该using语句,因为它会Dispose在退出该语句时调用。

SqlConnection conn = new SqlConnection(strConn);
SqlCommand cmd = new SqlCommand(strQuery, conn);
SqlDataAdapter da = new SqlDataAdapter(cmd);
SqlCommandBuilder builder = new SqlCommandBuilder(da);

using (cmd)
{
    using (conn)
    {
        conn.Open();

        da.InsertCommand = builder.GetInsertCommand();
        da.Update(ds.Tables[0]);  //ERROR :- Update requires a valid InsertCommand when passed DataRow collection with new rows.

        conn.Close();
    }
}

编辑

如果您只是想对delete数据库中的数据进行重建,那么这与您最初的问题所暗示的完全不同。但是,下面是这将是多么简单。

var strQuery = "delete from [dbo].[" + table_name + "]";
SqlConnection conn = new SqlConnection(strConn);
SqlCommand cmd = new SqlCommand(strQuery, conn);
var rowsAffected = cmd.ExecuteNonQuery();

// do something with rowsAffected if you want

// now you can build `insert` statements if you want
// to put more data into it, which you could use the
// previous example for that
于 2012-11-02T11:28:49.943 回答