您的位置:首页 > 数据库

异步、sql转换成xml、保存到数据库出现异常

2012-05-30 17:43 381 查看
在以下将sql语句执行时,保存到数据库中出现问题

/// <summary>
/// 保存表数据
/// </summary>
/// <param name="strTableName">表名称</param>
/// <param name="sqls">语句集合</param>
/// <param name="task">任务</param>
/// <returns></returns>
public void SaveData(string strTableName, List<string> sqls, TaskDB task)
{
string strSql = "<sqls><sql><sqlstr type =\"command\" table=\"" + strTableName
+ "\">Delete From  " + strTableName + "</sqlstr></sql>";
foreach (var item in sqls)
{
strSql+= "<sql><sqlstr type =\"command\" table=\"" + strTableName
+ "\">" + item + "</sqlstr></sql>";
}
strSql += Duration.GetUpdateSql(Duration.GetIDByTableName(strTableName)) + "</sqls>";
//strSql += "</sqls>";
task.SQL = strSql;
task.Start();
}


当sql的数据条数多余297条时,出现保存异常,但在数据库里直接执行可以插入数据。

解决:将不采用一条数据一条<sql><sqlstr /></sql>的形式,改用所有sql放在一个里面,用begin end。

begin...end 有一个优势,当有任意一条出现问题时,所有都回滚。

1:.net 对字符长度有限制,每个<sql>标签都可能占用字符。这里我不太懂

2:人为对sql标签,xml解析有限制

3:如果对于异步操作时,一起发送过来,不是按照堆栈,而是哪个快就先执行哪个。

public void SaveData(string strTableName, List<string> sqls, TaskDB task)
{
string strSql = null;
strSql = "<sqls><sql><sqlstr type =\"command\" table=\"" + strTableName + "\">begin Delete From  " + strTableName + ";";
foreach (var item in sqls)
{
strSql += item;
}
strSql += "end;</sqlstr></sql>";
strSql += Duration.GetUpdateSql(Duration.GetIDByTableName(strTableName)) + "</sqls>";
task.SQL = strSql;
task.Start();
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐