捕捉到的错误如下:
"另一个 SqlParameterCollection 已包含带有 ParameterName“@rssid”的 SqlParameter。"
部分关键源代码: public void InsertNewsItems(int rssid,string c channelUri,SqlParameter[] sparameters)
{
NewItemInfo itemInfo=new NewItemInfo();
itemInfo.rssid=rssid;
itemInfo.sqrs=sparameters;
ArrayList itemsList=GetNewsItemsList(channelUri);
if(itemsList==null)
return;
for(int i=0;i<itemsList.Count;i++)
{
itemInfo.otherInfo=(string[])itemsList[i];
ThreadPool.QueueUserWorkItem(new WaitCallback(InsertOneItem),itemInfo);
Thread.Sleep(300);
}
}
public void InsertOneItem(object Info)
{
try
{
lock(this)
{
NewItemInfo itemInfo=(NewItemInfo)Info;
SqlParameter[] sqrs=itemInfo.sqrs;
sqrs[0].Value=itemInfo.rssid;
string[] subString=new string[4];
subString=itemInfo.otherInfo;
sqrs[1].Value=subString[0];
sqrs[2].Value=subString[1];
sqrs[3].Value=subString[2];
sqrs[4].Value=subString[3];
sqrs[5].Value=GetWebContent(subString[1]);
dbRss.InsertItems(sqrs);
}
}
catch(Exception ex)
{
System.Windows.Forms.MessageBox.Show(ex.StackTrace,"InsertOneItem"+ex.Message);
}
}
public bool InsertItems(SqlParameter[] sprs)
{
try
{
SqlCommand scmd=new SqlCommand("prInsertItems",sqc);
scmd.CommandType=CommandType.StoredProcedure;
sqc.Open();
for(int i=0;i<sprs.Length;i++)
{
scmd.Parameters.Add(sprs[i]);
}
scmd.ExecuteNonQuery();
return true;
}
catch(Exception sex)
{
System.Windows.Forms.MessageBox.Show("InsertItemsError",sex.Message);
return false;
}
finally
{
if(sqc.State==ConnectionState.Open)
sqc.Close();
}
}
"另一个 SqlParameterCollection 已包含带有 ParameterName“@rssid”的 SqlParameter。"
部分关键源代码: public void InsertNewsItems(int rssid,string c channelUri,SqlParameter[] sparameters)
{
NewItemInfo itemInfo=new NewItemInfo();
itemInfo.rssid=rssid;
itemInfo.sqrs=sparameters;
ArrayList itemsList=GetNewsItemsList(channelUri);
if(itemsList==null)
return;
for(int i=0;i<itemsList.Count;i++)
{
itemInfo.otherInfo=(string[])itemsList[i];
ThreadPool.QueueUserWorkItem(new WaitCallback(InsertOneItem),itemInfo);
Thread.Sleep(300);
}
}
public void InsertOneItem(object Info)
{
try
{
lock(this)
{
NewItemInfo itemInfo=(NewItemInfo)Info;
SqlParameter[] sqrs=itemInfo.sqrs;
sqrs[0].Value=itemInfo.rssid;
string[] subString=new string[4];
subString=itemInfo.otherInfo;
sqrs[1].Value=subString[0];
sqrs[2].Value=subString[1];
sqrs[3].Value=subString[2];
sqrs[4].Value=subString[3];
sqrs[5].Value=GetWebContent(subString[1]);
dbRss.InsertItems(sqrs);
}
}
catch(Exception ex)
{
System.Windows.Forms.MessageBox.Show(ex.StackTrace,"InsertOneItem"+ex.Message);
}
}
public bool InsertItems(SqlParameter[] sprs)
{
try
{
SqlCommand scmd=new SqlCommand("prInsertItems",sqc);
scmd.CommandType=CommandType.StoredProcedure;
sqc.Open();
for(int i=0;i<sprs.Length;i++)
{
scmd.Parameters.Add(sprs[i]);
}
scmd.ExecuteNonQuery();
return true;
}
catch(Exception sex)
{
System.Windows.Forms.MessageBox.Show("InsertItemsError",sex.Message);
return false;
}
finally
{
if(sqc.State==ConnectionState.Open)
sqc.Close();
}
}
解决方案 »
- C# 如何判断process启动完毕
- C#如何判断鼠标移除pictureBox
- c#.net常用函数和方法集
- 问一个入门问题,
- 在window 2003 server上安装.net2003一定要把系统分区转化为ntfs格式吗
- 数据从DataGrid导出到Excel后,怎样使标题行在打印时出现在每一页?
- 怎样彻底解决屏闪问题?
- 在asp.net中如何导入excel数据到sql数据库中
- 请问:如何开始制作用户自定义的web control?
- ListView控件CheckedIndices属性的问题?
- 请问怎么,合并EXCEL的单元格
- 100分求:Cell组件有SaveToBuffer函数VB调用实例,怎样在C#中调用
你是不是少了这个类似的东西???
SqlParameter[] sqrs=new SqlParameter[6];
sqrs[0]=new SqlParameter("@rssid",SqlDbType.Int);
sqrs[1]=new SqlParameter("@title",System.Data.SqlDbType.VarChar,500);
sqrs[2]=new SqlParameter("@link",System.Data.SqlDbType.VarChar,500);
sqrs[3]=new SqlParameter("@description",System.Data.SqlDbType.NText);
sqrs[4]=new SqlParameter("@pubdate",System.Data.SqlDbType.VarChar,20);
sqrs[5]=new SqlParameter("@content",System.Data.SqlDbType.NText);
ALTER Procedure prInsertItems
(
@rssid int,
@title varchar(500),
@link varchar(500),
@description ntext=null,
@pubdate varchar(20)=null,
@content ntext=null
)
as
begin
insert into items(rssid,title,link,description,pubdate,content)
values(@rssid,@title,@link,@description,@pubdate,@content)
end
scmd.Parameters.Clear();
懷疑是你的參數重復添加了
如果放置commnd.Parameters.Clear()则将Parameters设置为空引用,而framework机制只是限制两个SqlParameterCollection指向同一个对象,并没有限制数组和SqlParameterCollection指向同一个对象。此时单线程调用时不会出错。但因为web本身就是多线程,在多线程的情况下,只有通过deep copy才能避免SqlParameterCollection指向同一个对象,所以此种方法不可行
解决方法是
public bool InsertItems(SqlParameter[] sprs)
{
try
{
if(sqc.State==ConnectionState.Open)
sqc.Close();
SqlCommand scmd=new SqlCommand("prInsertItems",sqc);
scmd.CommandType=CommandType.StoredProcedure;
sqc.Open();
SqlParameter[] sqlprs=new SqlParameter[sprs.Length];
for(int j=0;j<sprs.Length;j++)
{
sqlprs[j]=(SqlParameter)((ICloneable)sprs[j]).Clone();
}
for(int i=0;i<sqlprs.Length;i++)
{
scmd.Parameters.Add(sqlprs[i]);
}
scmd.ExecuteNonQuery();
return true;
}
catch(Exception sex)
{
System.Windows.Forms.MessageBox.Show("InsertItemsError",sex.Message);
return false;
}
finally
{
if(sqc.State==ConnectionState.Open)
sqc.Close();
}
}