以前问过这个问题 还不是很清楚。
我想在某个表中保存一些参数,保存前需要判断该记录是否存在,如果不存在则插入一条记录,
如果存在,则更新这条记录。
表结构ExtrInfo如下 int varchar(50) varchar(50) varchar(50) varchar(50) varchar(50)
Id Header SubItem1 SubItem2 SubItem3 SubItem4
以前ADO的时候,直接用下面操作就可以了
查询索引 sql="select * from extrainfo where header='标志'
_RecordsetPtr pRst;
pRst.CreateInstance(__uuidof(Recordset));
pRst->Open((_variant_t)sql,_variant_t((IDispatch*)连接实例,true),adOpenStatic,adLockOptimistic,adCmdText);
if(pRst->adoEOF)
pRst->AddNew();
pRst->PutCollect("Header",_variant_t(sFlag));
pRst->PutCollect("SubItem1",_variant_t(str1));
pRst->PutCollect("SubItem2",_variant_t(str2));
pRst->PutCollect("SubItem3",_variant_t(str3));
pRst->PutCollect("SubItem4",_variant_t(str4));
pRst->Update();
pRst->Close(); 我想也是用上面的方式 操作记录集,请问有什么办法??
判断记录是否存在 不存在则插入能否一次操作数据就完成???
用 SqlConnection conn = database.GetConnect();
conn.Open();
SqlDataAdapter sda = new SqlDataAdapter(sql, conn);
SqlCommandBuilder CB = new SqlCommandBuilder(sda);
DataSet ds = new DataSet();
sda.Fill(ds, "test"); DataTable dt = ds.Tables["test"];
if (dt.Rows.Count > 0)
{
DataRow dr = ds.Tables["test"].Rows[0];
dr.BeginEdit(); dr["SubItem1"] = “内容1”;
dr["SubItem2"] = “内容2”;
dr.EndEdit();
}
else
{ DataRow dr = ds.Tables["test"].NewRow();
dr["SubItem1"] = “内容1”;
dr["SubItem2"] = “内容2”;
ds.Tables["list"].Rows.Add(dr);
} int errorNum = sda.Update(ds, "test");
用SqlCommand操作的时候,如果表没有主键,则提示SelectComand不支持UpdateCommand的动态Sql语句生成。
请问有其它办法没有实现。
我想在某个表中保存一些参数,保存前需要判断该记录是否存在,如果不存在则插入一条记录,
如果存在,则更新这条记录。
表结构ExtrInfo如下 int varchar(50) varchar(50) varchar(50) varchar(50) varchar(50)
Id Header SubItem1 SubItem2 SubItem3 SubItem4
以前ADO的时候,直接用下面操作就可以了
查询索引 sql="select * from extrainfo where header='标志'
_RecordsetPtr pRst;
pRst.CreateInstance(__uuidof(Recordset));
pRst->Open((_variant_t)sql,_variant_t((IDispatch*)连接实例,true),adOpenStatic,adLockOptimistic,adCmdText);
if(pRst->adoEOF)
pRst->AddNew();
pRst->PutCollect("Header",_variant_t(sFlag));
pRst->PutCollect("SubItem1",_variant_t(str1));
pRst->PutCollect("SubItem2",_variant_t(str2));
pRst->PutCollect("SubItem3",_variant_t(str3));
pRst->PutCollect("SubItem4",_variant_t(str4));
pRst->Update();
pRst->Close(); 我想也是用上面的方式 操作记录集,请问有什么办法??
判断记录是否存在 不存在则插入能否一次操作数据就完成???
用 SqlConnection conn = database.GetConnect();
conn.Open();
SqlDataAdapter sda = new SqlDataAdapter(sql, conn);
SqlCommandBuilder CB = new SqlCommandBuilder(sda);
DataSet ds = new DataSet();
sda.Fill(ds, "test"); DataTable dt = ds.Tables["test"];
if (dt.Rows.Count > 0)
{
DataRow dr = ds.Tables["test"].Rows[0];
dr.BeginEdit(); dr["SubItem1"] = “内容1”;
dr["SubItem2"] = “内容2”;
dr.EndEdit();
}
else
{ DataRow dr = ds.Tables["test"].NewRow();
dr["SubItem1"] = “内容1”;
dr["SubItem2"] = “内容2”;
ds.Tables["list"].Rows.Add(dr);
} int errorNum = sda.Update(ds, "test");
用SqlCommand操作的时候,如果表没有主键,则提示SelectComand不支持UpdateCommand的动态Sql语句生成。
请问有其它办法没有实现。
事实上,设计数据库表的时候,为每个表都设计主键是一种最佳时间,相反,没有主键是不良的设计陋习。
多谢 道理明白了
但是使用DataAdapter也必须用主键,否则也不能更新
个人觉得