我是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 + "]";
我可以在询问之前搜索过这个,但我不知道应该使用哪些关键字 如果这是一个非常简单的问题,请在评论中回答。
答案 0 :(得分:1)
要更新结果为DataTable
的表格,您必须配置SelectCommand
,DeleteCommand
,InsertCommand
和UpdateCommand
属性(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