如何将数据集值添加到sql

时间:2012-11-02 10:54:32

标签: c# sql winforms dataset

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

我有类似这样的DataSet

  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 + "]";

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

2 个答案:

答案 0 :(得分:1)

要更新结果为DataTable的表格,您必须配置SelectCommandDeleteCommandInsertCommandUpdateCommand属性(SqlCommand对象) SqlDataAdapter课程。

答案 1 :(得分: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