谁给看看这个方法有没有问题

w398687283 2010-07-09 11:52:06
public string ExecuteNonQuery_dao(string proname, params SqlParameter[] commandParameters)
{
//加入事务处理
//using (TransactionScope TS = new TransactionScope())
//{
SqlCommand cmd = new SqlCommand();

SqlParameter returnvalue = new SqlParameter("@reutrnValue", SqlDbType.VarChar, 100);
returnvalue.Direction = ParameterDirection.Output;
cmd.Parameters.Add(returnvalue);
PrepareCommand(cmd, con, null, CommandType.StoredProcedure, proname, commandParameters);
int val = cmd.ExecuteNonQuery();
//TS.Complete();
cmd.Parameters.Clear();
return returnvalue.Value.ToString();


//}
}

private static void PrepareCommand(SqlCommand cmd, SqlConnection conn, SqlTransaction trans, CommandType cmdType, string cmdText, SqlParameter[] cmdParms)
{

if (conn.State != ConnectionState.Open)
{
conn.Close();
conn.Open();
}

cmd.Connection = conn;
cmd.CommandText = cmdText;

if (trans != null)
cmd.Transaction = trans;

cmd.CommandType = cmdType;

if (cmdParms != null)
{
foreach (SqlParameter parm in cmdParms)
cmd.Parameters.Add(parm);
}
}



用存储过程批量导入数据,偶尔会报错,意思是某个连接未关闭,请各位给看看是这里的问题吗?
...全文
78 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
w398687283 2010-07-11
  • 打赏
  • 举报
回复
周末有事没上网,现在来结贴,多谢各位
w398687283 2010-07-10
  • 打赏
  • 举报
回复
if (conn.State == ConnectionState.Broken)
{
conn.Close();
conn.Open();
}

if (conn.State == ConnectionState.Closed)
{
conn.Open();
}
新加一个public SqlConnection Mycon = new SqlConnection(System.Configuration.ConfigurationManager.ConnectionStrings["conn"].ToString());
这样可以吗?

SqlHelper s = new SqlHelper();

string returnvalue = "数据库操作失败";
try
{
returnvalue = s.ExecuteNonQuery_dao(SqlHelper.getDB.Mycon,"pro_dao_stu", para);
}
这样可以吗?




[Quote=引用 7 楼 bancxc 的回复:]
比如说两个地放调用这个方法PrepareCommand

if (conn.State != ConnectionState.Open)
{

conn.Close(); --B
conn.Open(); --A
}

比如说A跑玩open(),B下去又把他close了,
A跑到后面执行查询不就报错了么
[/Quote]
bancxc 2010-07-10
  • 打赏
  • 举报
回复
比如说两个地放调用这个方法PrepareCommand

if (conn.State != ConnectionState.Open)
{

conn.Close(); --B
conn.Open(); --A
}

比如说A跑玩open(),B下去又把他close了,
A跑到后面执行查询不就报错了么
bancxc 2010-07-10
  • 打赏
  • 举报
回复
不知道谁叫你们这样写的
public static SqlConnection con
w398687283 2010-07-10
  • 打赏
  • 举报
回复
我有sqlhelper.cs
别的都没问题,就是在批量导入的时候会报错
[Quote=引用 4 楼 xupeihuagudulei 的回复:]
去下一个sqlhelper.cs
[/Quote]
xupeihuagudulei 2010-07-10
  • 打赏
  • 举报
回复
去下一个sqlhelper.cs
w398687283 2010-07-10
  • 打赏
  • 举报
回复
改成这样可以吗?
string returnValue = SqlHelper.getDB.ExecuteNonQuery_dao(SqlHelper.con, "Tab_qiandao_up", parm);
public static SqlConnection con = new SqlConnection(System.Configuration.ConfigurationManager.ConnectionStrings["conn"].ToString());

public string ExecuteNonQuery_dao(SqlConnection Mycon,string proname, params SqlParameter[] commandParameters)
{
//加入事务处理
//using (TransactionScope TS = new TransactionScope())
//{
SqlCommand cmd = new SqlCommand();

SqlParameter returnvalue = new SqlParameter("@reutrnValue", SqlDbType.VarChar, 100);
returnvalue.Direction = ParameterDirection.Output;
cmd.Parameters.Add(returnvalue);
PrepareCommand(cmd, Mycon, null, CommandType.StoredProcedure, proname, commandParameters);
int val = cmd.ExecuteNonQuery();
//TS.Complete();
cmd.Parameters.Clear();

return returnvalue.Value.ToString();


//}
}

[Quote=引用 1 楼 bancxc 的回复:]
有并发问题
PrepareCommand(cmd, con, null, CommandType.StoredProcedure, proname, commandParameters);
你的conn是在哪儿定义的 如果都用一个连接肯定有并发问题的
[/Quote]
w398687283 2010-07-10
  • 打赏
  • 举报
回复
SqlHelper s = new SqlHelper();

string returnvalue = "数据库操作失败";
try
{
returnvalue = s.ExecuteNonQuery_dao("pro_dao_stu", para);
}
这个是调用方法
static SqlConnection con = new SqlConnection(System.Configuration.ConfigurationManager.ConnectionStrings["conn"].ToString());
这个是和上边那两个方法写在数据库访问类里边的
怎么个并发问题?应该怎么解决呢?
谢谢
[Quote=引用 1 楼 bancxc 的回复:]
有并发问题
PrepareCommand(cmd, con, null, CommandType.StoredProcedure, proname, commandParameters);
你的conn是在哪儿定义的 如果都用一个连接肯定有并发问题的
[/Quote]
lester19872007 2010-07-10
  • 打赏
  • 举报
回复
这个可以解决你现在的问题!
你可以下载下来,看看里面的方法是怎么写的,在自己写写!
bancxc 2010-07-09
  • 打赏
  • 举报
回复
有并发问题
PrepareCommand(cmd, con, null, CommandType.StoredProcedure, proname, commandParameters);
你的conn是在哪儿定义的 如果都用一个连接肯定有并发问题的

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧