在SQL语句里面加上个判断就可以了,注意,是在SQL语句里加 IF EXISTS(SELECT 1 FROM YourTable WHERE YourCondition) BEGIN ...//Your Code Here END 这样就不会提示了楼主的问题我以前也遇到过,如果你更新或删除一个表的时候,而你想更新或删除的记录不存在的时候,你没加上任何判断的话,就会出现这种情况. 在SQL查询分析器里面,加判断和不加判断下面显示的结果是不一样的,个人感觉bindingNavigator应该是根据这个结果来进行判断的.
public string aaa(string sql1,string sql2)
{
con.Open();
SqlTransaction sta = con.BeginTransaction(IsolationLevel.RepeatableRead, "aaa");//RepeatableRead: 在查询中使用的所有数据上放置锁,以防止其他用户更新这些数据。防止不可重复的读取,但是仍可以有幻像行。
SqlCommand cmd = con.CreateCommand();
cmd.Connection = con;
cmd.Transaction = sta; try
{ cmd.CommandText = sql1;
cmd.ExecuteNonQuery();
cmd.CommandText = sql2;
cmd.ExecuteNonQuery();
sta.Commit();
return "success";
}
catch (Exception e)
{
try
{
sta.Rollback();
}
catch (SqlException ex)
{
if (sta.Connection != null)
{
return "An exception of type " + ex.GetType().ToString();
}
}
return e.GetType().ToString();
}
finally
{
con.Close();
}
}
// 指定连接的事务锁定行为。
public enum IsolationLevel
{
// 摘要:
// 正在使用与指定隔离级别不同的隔离级别,但是无法确定该级别。
Unspecified = -1,
//
// 摘要:
// 无法改写隔离级别更高的事务中的挂起的更改。
Chaos = 16,
//
// 摘要:
// 可以进行脏读,意思是说,不发布共享锁,也不接受独占锁。
ReadUncommitted = 256,
//
// 摘要:
// 在正在读取数据时保持共享锁,以避免脏读,但是在事务结束之前可以更改数据,从而导致不可重复的读取或幻像数据。
ReadCommitted = 4096,
//
// 摘要:
// 在查询中使用的所有数据上放置锁,以防止其他用户更新这些数据。防止不可重复的读取,但是仍可以有幻像行。
RepeatableRead = 65536,
//
// 摘要:
// 在 System.Data.DataSet 上放置范围锁,以防止在事务完成之前由其他用户更新行或向数据集中插入行。
Serializable = 1048576,
//
// 摘要:
// 通过在一个应用程序正在修改数据时存储另一个应用程序可以读取的相同数据版本来减少阻止。表示您无法从一个事务中看到在其他事务中进行的更改,即便重新查询也是如此。
Snapshot = 16777216,
}
IF EXISTS(SELECT 1 FROM YourTable WHERE YourCondition)
BEGIN
...//Your Code Here
END
这样就不会提示了楼主的问题我以前也遇到过,如果你更新或删除一个表的时候,而你想更新或删除的记录不存在的时候,你没加上任何判断的话,就会出现这种情况.
在SQL查询分析器里面,加判断和不加判断下面显示的结果是不一样的,个人感觉bindingNavigator应该是根据这个结果来进行判断的.
我是建的dataset1.xsd 在里面加的tableAdapter ,就没有sql语句。
事务很难用吗
关键我是用 dataSet11、bindingSource1、bindingNavigator 自动实现的 增加、修改、删除都是vs实现的,
我是建的dataset1.xsd 在里面加的tableAdapter ,就没有sql语句。
datagrid 里那么多记录 我得判断多少啊 我是在datagrid里直接添加、修改的