开发工具:C# 2008
LINQ
问题:
当只有一个客户端操作的时候没有问题,多个客户端只要不是同时进行这个操作也没问题,但只要两个或以前的用户同时点击确定后执行以下代码则会报错:
在调用 SubmitChanges 期间不能执行此操作。
出错语句是下面这一句:try
{
tt = 5;
db.SubmitChanges(System.Data.Linq.ConflictMode.ContinueOnConflict);与http://topic.csdn.net/u/20100801/11/4648194c-4bc5-4002-b540-53f36033dc37.html?seed=613216744&r=67382619#r_67382619是同一个问题
附代码:
int tt = 0;
int aa = 0; //if (token.pwd != ConfigurationManager.AppSettings["pwd"])
// return false; //设置类别
this.SetCategory(streetName, version);
bool flag = true; //using (db = new ORShoppingDataContext(this.ORConnectingString))
//{ string filename = string.Format(@"{0}\ExportLog{1}.txt", this.LogPath
, DateTime.Now.ToString("yyyyMMddHHmmssfff"));
StreamWriter sw = new StreamWriter(filename, true, Encoding.UTF8);
try
{
//string fileContents;
//using (StreamReader sr = new StreamReader(@"D:\Test.txt", System.Text.Encoding.UTF8))
//{
// fileContents = sr.ReadToEnd();
//}
//xml = fileContents;
//streetName = "男性时尚";
//version = "China"; //using (TransactionScope ts = new TransactionScope())
//{ if (db.Connection != null) db.Connection.Open();
DbTransaction tran = db.Connection.BeginTransaction();
db.Transaction = tran; try
{
string str = "";
str = string.Format("<?xml version={0}1.0{1} encoding={2}utf-8{3} standalone={4}yes{5} ?>", dqm, dqm, dqm, dqm, dqm, dqm);
str += @"<DataList> ";
str += xml;
str += "</DataList>";
XmlDocument doc = new XmlDocument();
doc.InnerXml = str; DataSet dsStatic = new DataSet(); //读出后一个Table
//dsStatic.ReadXml(new XmlNodeReader(doc)); aa = 1; using (XmlNodeReader read = new XmlNodeReader(doc))
{
dsStatic.ReadXml(read);
read.Close(); } DataTable tb = dsStatic.Tables[0];
DataRow mrow = dsStatic.Tables[0].Rows[0]; //dsStatic.Dispose(); tt = 1; string originalThumbnail = "";
string originalThumbnailType = ""; originalThumbnail = mrow["OriginalThumbnail"].ToString();
originalThumbnailType = GetFileType(mrow["OriginalThumbnail"].ToString()); int ver = 1; string imageType = mrow["ImageType"].ToString();
//如果有旧的则读出旧的记录
int? sid = 0;
db.uspGetSrdID(mrow["uid"].ToString(), 1, streetName, ref sid); var oldSrd =
(from s in db.ShopRecordData
where s.ShopRecordDataID == (int)sid
select s).FirstOrDefault(); //var oldSrd =
// (from os in db.ShopRecordData
// where os.Uid.Trim() == mrow["uid"].ToString().Trim()
// && os.XmlType == 1
// && os.RecordState == 1
// && os.Ver == (from s in db.ShopRecordData
// where s.DataListID == os.DataListID
// && s.XmlType == os.XmlType
// && s.Uid == s.Uid
// && s.RecordState == os.RecordState
// select s.Ver).Max()
// select os).FirstOrDefault(); tt = 2;
if (oldSrd != null)
{
var sver =
(from os in db.ShopRecordData
where os.ShopRecordDataID==sid
select os.Ver).Max();
ver = sver + 1;
try
{
db.SubmitChanges(System.Data.Linq.ConflictMode.ContinueOnConflict); tt = 3;
}
catch (System.Data.Linq.ChangeConflictException ex)
{
db.ChangeConflicts.ResolveAll(RefreshMode.KeepChanges);//保存原来的值 有冲突的话保存当前版本
db.SubmitChanges();
} } //1.插入ShopRecordData
ShopRecordData srd = new ShopRecordData()
{
DataListID = this.CatagoryIndex,
XmlType = 1,
RecordID = 1,
Uid = mrow["Uid"].ToString().Trim(),
Title = mrow["Title"].ToString() == string.Empty ? "" : GetEscapeCharter(mrow["Title"].ToString().Substring(0, (mrow["Title"].ToString().Length > 255 ? 255 : mrow["Title"].ToString().Length))),
DataCount = GetInt32(mrow["DataCount"].ToString()),
MinPrice = GetDecimal(mrow["MinPrice"].ToString()),
MaxPrice = GetDecimal(mrow["MaxPrice"].ToString()),
OriginalUrl = mrow["OriginalUrl"].ToString(),
OriginalUrlType = GetFileType(mrow["OriginalUrl"].ToString()),
OriginalThumbnail = mrow["OriginalThumbnail"].ToString(),
OriginalThumbnailType = originalThumbnailType,
ImageUrl = mrow["ImageUrl"].ToString() == string.Empty ? "" : mrow["ImageUrl"].ToString(),
ImageUrlType = GetFileType(mrow["ImageUrl"].ToString()),
ImageLink = mrow["ImageLink"].ToString() == string.Empty ? "" : mrow["ImageLink"].ToString(),
CommentCount = GetInt32(mrow["CommentCount"].ToString()),
Grade = GetInt32(mrow["Grade"].ToString()),
ProductDesc = mrow["ProductDesc"].ToString() == string.Empty ? "" : mrow["ProductDesc"].ToString(),
Scene = GetInt32(mrow["Scene"].ToString()),
X = GetDouble(mrow["X"].ToString()),
Y = GetDouble(mrow["Y"].ToString()),
Z = GetDouble(mrow["Z"].ToString()),
Width = GetDecimal(mrow["Width"].ToString()),
Height = GetDecimal(mrow["Height"].ToString()),
CreateTime = Convert.ToDateTime(mrow["CreateTime"].ToString()),
UpdatedTime = Convert.ToDateTime(mrow["UpdatedTime"].ToString()),
Ver = ver,
RecordState = 1,
DirectionID = mrow["Location"].ToString() == "左" ? 1 : 2,
Angle = tb.Columns.Contains("Angle") == true ? GetDouble(mrow["Angle"].ToString()) : 0, //添加是否有内容的判断 即image1 节的内容不为空 2010.5.28 11:57 Modify by ling
//CanClick = mrow["Image1"].ToString() == string.Empty ? false : true,
CanClick = false,
EnterType = imageType,
IsBuild = false,
ParentID = 0 }; if (tb.Columns.Contains("DetailWallPaperUrl"))
{
tt = 4;
srd.DetailWallPaperUrl = mrow["DetailWallPaperUrl"].ToString().Trim();
srd.DetailWallPaperType = GetFileType(mrow["DetailWallPaperUrl"].ToString());
if (oldSrd != null)
{
srd.DetailWallPaper = oldSrd.DetailWallPaper;
}
} db.ShopRecordData.InsertOnSubmit(srd); try
{
tt = 5;
db.SubmitChanges(System.Data.Linq.ConflictMode.ContinueOnConflict);
}
catch (System.Data.Linq.ChangeConflictException ex)
{
db.ChangeConflicts.ResolveAll(RefreshMode.KeepChanges);//保存原来的值 有冲突的话保存当前版本
db.SubmitChanges();
}
LINQ
问题:
当只有一个客户端操作的时候没有问题,多个客户端只要不是同时进行这个操作也没问题,但只要两个或以前的用户同时点击确定后执行以下代码则会报错:
在调用 SubmitChanges 期间不能执行此操作。
出错语句是下面这一句:try
{
tt = 5;
db.SubmitChanges(System.Data.Linq.ConflictMode.ContinueOnConflict);与http://topic.csdn.net/u/20100801/11/4648194c-4bc5-4002-b540-53f36033dc37.html?seed=613216744&r=67382619#r_67382619是同一个问题
附代码:
int tt = 0;
int aa = 0; //if (token.pwd != ConfigurationManager.AppSettings["pwd"])
// return false; //设置类别
this.SetCategory(streetName, version);
bool flag = true; //using (db = new ORShoppingDataContext(this.ORConnectingString))
//{ string filename = string.Format(@"{0}\ExportLog{1}.txt", this.LogPath
, DateTime.Now.ToString("yyyyMMddHHmmssfff"));
StreamWriter sw = new StreamWriter(filename, true, Encoding.UTF8);
try
{
//string fileContents;
//using (StreamReader sr = new StreamReader(@"D:\Test.txt", System.Text.Encoding.UTF8))
//{
// fileContents = sr.ReadToEnd();
//}
//xml = fileContents;
//streetName = "男性时尚";
//version = "China"; //using (TransactionScope ts = new TransactionScope())
//{ if (db.Connection != null) db.Connection.Open();
DbTransaction tran = db.Connection.BeginTransaction();
db.Transaction = tran; try
{
string str = "";
str = string.Format("<?xml version={0}1.0{1} encoding={2}utf-8{3} standalone={4}yes{5} ?>", dqm, dqm, dqm, dqm, dqm, dqm);
str += @"<DataList> ";
str += xml;
str += "</DataList>";
XmlDocument doc = new XmlDocument();
doc.InnerXml = str; DataSet dsStatic = new DataSet(); //读出后一个Table
//dsStatic.ReadXml(new XmlNodeReader(doc)); aa = 1; using (XmlNodeReader read = new XmlNodeReader(doc))
{
dsStatic.ReadXml(read);
read.Close(); } DataTable tb = dsStatic.Tables[0];
DataRow mrow = dsStatic.Tables[0].Rows[0]; //dsStatic.Dispose(); tt = 1; string originalThumbnail = "";
string originalThumbnailType = ""; originalThumbnail = mrow["OriginalThumbnail"].ToString();
originalThumbnailType = GetFileType(mrow["OriginalThumbnail"].ToString()); int ver = 1; string imageType = mrow["ImageType"].ToString();
//如果有旧的则读出旧的记录
int? sid = 0;
db.uspGetSrdID(mrow["uid"].ToString(), 1, streetName, ref sid); var oldSrd =
(from s in db.ShopRecordData
where s.ShopRecordDataID == (int)sid
select s).FirstOrDefault(); //var oldSrd =
// (from os in db.ShopRecordData
// where os.Uid.Trim() == mrow["uid"].ToString().Trim()
// && os.XmlType == 1
// && os.RecordState == 1
// && os.Ver == (from s in db.ShopRecordData
// where s.DataListID == os.DataListID
// && s.XmlType == os.XmlType
// && s.Uid == s.Uid
// && s.RecordState == os.RecordState
// select s.Ver).Max()
// select os).FirstOrDefault(); tt = 2;
if (oldSrd != null)
{
var sver =
(from os in db.ShopRecordData
where os.ShopRecordDataID==sid
select os.Ver).Max();
ver = sver + 1;
try
{
db.SubmitChanges(System.Data.Linq.ConflictMode.ContinueOnConflict); tt = 3;
}
catch (System.Data.Linq.ChangeConflictException ex)
{
db.ChangeConflicts.ResolveAll(RefreshMode.KeepChanges);//保存原来的值 有冲突的话保存当前版本
db.SubmitChanges();
} } //1.插入ShopRecordData
ShopRecordData srd = new ShopRecordData()
{
DataListID = this.CatagoryIndex,
XmlType = 1,
RecordID = 1,
Uid = mrow["Uid"].ToString().Trim(),
Title = mrow["Title"].ToString() == string.Empty ? "" : GetEscapeCharter(mrow["Title"].ToString().Substring(0, (mrow["Title"].ToString().Length > 255 ? 255 : mrow["Title"].ToString().Length))),
DataCount = GetInt32(mrow["DataCount"].ToString()),
MinPrice = GetDecimal(mrow["MinPrice"].ToString()),
MaxPrice = GetDecimal(mrow["MaxPrice"].ToString()),
OriginalUrl = mrow["OriginalUrl"].ToString(),
OriginalUrlType = GetFileType(mrow["OriginalUrl"].ToString()),
OriginalThumbnail = mrow["OriginalThumbnail"].ToString(),
OriginalThumbnailType = originalThumbnailType,
ImageUrl = mrow["ImageUrl"].ToString() == string.Empty ? "" : mrow["ImageUrl"].ToString(),
ImageUrlType = GetFileType(mrow["ImageUrl"].ToString()),
ImageLink = mrow["ImageLink"].ToString() == string.Empty ? "" : mrow["ImageLink"].ToString(),
CommentCount = GetInt32(mrow["CommentCount"].ToString()),
Grade = GetInt32(mrow["Grade"].ToString()),
ProductDesc = mrow["ProductDesc"].ToString() == string.Empty ? "" : mrow["ProductDesc"].ToString(),
Scene = GetInt32(mrow["Scene"].ToString()),
X = GetDouble(mrow["X"].ToString()),
Y = GetDouble(mrow["Y"].ToString()),
Z = GetDouble(mrow["Z"].ToString()),
Width = GetDecimal(mrow["Width"].ToString()),
Height = GetDecimal(mrow["Height"].ToString()),
CreateTime = Convert.ToDateTime(mrow["CreateTime"].ToString()),
UpdatedTime = Convert.ToDateTime(mrow["UpdatedTime"].ToString()),
Ver = ver,
RecordState = 1,
DirectionID = mrow["Location"].ToString() == "左" ? 1 : 2,
Angle = tb.Columns.Contains("Angle") == true ? GetDouble(mrow["Angle"].ToString()) : 0, //添加是否有内容的判断 即image1 节的内容不为空 2010.5.28 11:57 Modify by ling
//CanClick = mrow["Image1"].ToString() == string.Empty ? false : true,
CanClick = false,
EnterType = imageType,
IsBuild = false,
ParentID = 0 }; if (tb.Columns.Contains("DetailWallPaperUrl"))
{
tt = 4;
srd.DetailWallPaperUrl = mrow["DetailWallPaperUrl"].ToString().Trim();
srd.DetailWallPaperType = GetFileType(mrow["DetailWallPaperUrl"].ToString());
if (oldSrd != null)
{
srd.DetailWallPaper = oldSrd.DetailWallPaper;
}
} db.ShopRecordData.InsertOnSubmit(srd); try
{
tt = 5;
db.SubmitChanges(System.Data.Linq.ConflictMode.ContinueOnConflict);
}
catch (System.Data.Linq.ChangeConflictException ex)
{
db.ChangeConflicts.ResolveAll(RefreshMode.KeepChanges);//保存原来的值 有冲突的话保存当前版本
db.SubmitChanges();
}
LINQ2SQL的并发