事务没限制,你这个错误是你要插入的数据内容与数据库里字段的数据内容不兼容(超出了数据长度)。
在执行 10个以下的插入语句是可以的。 也就是 10*3=30个SQL语句的时候。
应该不会是 赋值超过了字段的对应长度吧
@二十三号同学: 你是把SQL写入到一个字符串,然后再执行?
@笨笨蜗牛: 对。
@二十三号同学:
那就是你的SQL语句组合成的字符串超出了这个字符串定义的长度了。
你可以这样(伪代码):
1、启动事务
2、使用EXECUTE逐条执行insert操作
3、关闭事务
我从网上Down的批量SQL,这样是不对的???
if (con.State == ConnectionState.Closed)
con.Open();
string mingling = "";
SqlTransaction tran = con.BeginTransaction();
SqlCommand command = new SqlCommand();
command.Transaction = tran;
command.Connection = con;
command.CommandType = CommandType.Text;
try
{
for (int i = 0; i < sql.Length; i++)
{
if (sql[i].Trim() != "")
{
mingling += "\r\n" + sql[i];
command.CommandText = sql[i];
command.ExecuteNonQuery();
}
}
tran.Commit();
return true;
}
catch (Exception ex)
{
tran.Rollback();
WriteToLog(mingling + "\r\n" + ex.Message);
//ShowErr(ex.Message);
return false;
}
@二十三号同学:
语句没问题。
你看下,报告错误的那条SQL语句。
问题应该是指定语句中有数据内容的长度超出了字段定义的长度。
@笨笨蜗牛: 终于解决啦!!确实是某个字段的值,超过了长度了。
nvarchar(32) 原来只能放16个汉字哇。。。
额。。悲催
感谢蜗牛!!!
@二十三号同学:
nvarchar(32)是能放32的,怎么只能放16个?varchar(32)就是16个。