哪位高手指点一下,我的数据库操作类好象有问题,因为现在用户点击过多过快就容易出问题了

zky0901 2009-04-22 07:21:02
哪位高手指点一下,我的数据库操作类好象写的有问题,因为现在用户点击过多过快就容易出问题了,我的QQ是66377300,麻烦指点一下,混分的就不麻烦了,我用的是access2007的数据库,最好是加我QQ,我可以把情况说得更清楚一些

public class dbcon
{
public dbcon()
{
//
//TODO: 在此处添加构造函数逻辑
//
}

protected static OleDbConnection con = new OleDbConnection();
protected static OleDbCommand cmd = new OleDbCommand();

public static OleDbConnection createConnection()
{
OleDbConnection con = new OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + System.Web.HttpContext.Current.Server.MapPath(System.Configuration.ConfigurationSettings.AppSettings["apath"]) + ";Jet OLEDB:Database Password=888888;");

return con;
}

public static void closecon()
{
if (con.State == ConnectionState.Open)
{
con.Close();
con.Dispose();
}
}

private static void openConnection()
{
if (con.State == ConnectionState.Closed)
{
con.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + System.Web.HttpContext.Current.Server.MapPath(System.Configuration.ConfigurationSettings.AppSettings["apath"]) + ";Jet OLEDB:Database Password=888888;";
cmd.Connection = con;
try
{
con.Open();
}
catch
{
}
}
}

private static void closeConnection()
{
if (con.State == ConnectionState.Open)
{
con.Close();
con.Dispose();
cmd.Dispose();
}
}

public static bool executescala(string sqlstr)
{
int count = 0;
try
{
openConnection();
cmd.CommandType = CommandType.Text;
cmd.CommandText = sqlstr;
count = Convert.ToInt32(cmd.ExecuteScalar());
}
catch
{
safecode.catchshow();
}
finally
{
closeConnection();
}
if (count > 0)
{
return true;
}
else
{
return false;
}
}

public static bool executeupdate(string sqlstr) //用过了:判断是否执行sql更新语句
{
int updaterow = 0;
try
{
openConnection();
cmd.CommandType = CommandType.Text;
cmd.CommandText = sqlstr;
updaterow = Convert.ToInt32(cmd.ExecuteNonQuery());
}
catch
{
safecode.catchshow();
}
finally
{
closeConnection();
}
if (updaterow > 0)
{
return true;
}
else
{
return false;
}
}

public static object getscalar(string sqlstr) //返回首行首列
{
object obj = new object();
try
{
openConnection();
cmd.CommandType = CommandType.Text;
cmd.CommandText = sqlstr;
obj = cmd.ExecuteScalar();
}
catch
{
//throw new Exception(e.Message);
safecode.catchshow();
}
finally
{
closeConnection();
}
return obj;
}

public static OleDbDataReader getdatareader(string sqlstr)
{
OleDbDataReader dr = null;
try
{
openConnection();
cmd.CommandType = CommandType.Text;
cmd.CommandText = sqlstr;
dr = cmd.ExecuteReader(CommandBehavior.CloseConnection);
}
catch(Exception ex)
{
try
{
dr.Dispose();
closeConnection();
throw new Exception(ex.Message);
}
catch { }
}
return dr;
}

public static DataSet getdataset(string sqlstr)
{
DataSet ds = new DataSet();
OleDbDataAdapter adp = new OleDbDataAdapter();
try
{
openConnection();
cmd.CommandType = CommandType.Text;
cmd.CommandText = sqlstr;
adp.SelectCommand = cmd;
adp.Fill(ds);
}
catch
{
safecode.catchshow();
}
finally
{
closeConnection();
}
return ds;
}

public static DataView getdataview(string sqlstr)
{
try
{
openConnection();
OleDbDataAdapter adp = new OleDbDataAdapter(sqlstr,con);
DataSet rs = new DataSet();
adp.Fill(rs);
return rs.Tables[0].DefaultView;
}
catch(Exception e)
{
throw new Exception(e.Message);
}
}
}
...全文
184 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
V68V6 2009-04-23
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 gui0605 的回复:]
数据库的连接你都要写成静态的,人多访问不出问题才怪。
建议你别自己写了,直接用MS的SqlHelper就好了
[/Quote]

有现成的当然用微软的么,不是特殊应用,我想MS的多少比自己动手写的好吧?
地下室小红叔 2009-04-23
  • 打赏
  • 举报
回复
            try 
{
con.Open();
}
catch
{
}


这样写出了错也找不到原因
hm020 2009-04-23
  • 打赏
  • 举报
回复
受教了, 好贴啊,好好学
浪漫幕末 2009-04-23
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 gui0605 的回复:]
数据库的连接你都要写成静态的,人多访问不出问题才怪。
建议你别自己写了,直接用MS的SqlHelper就好了
[/Quote]
正解。你没明白static的含义。static的成员是所有实例公有的,用类名访问。
悔说话的哑巴 2009-04-23
  • 打赏
  • 举报
回复
楼主不要什么都写成static 我以前也是很喜欢那样写,我们老大说过后就改了,呵呵
llainn 2009-04-23
  • 打赏
  • 举报
回复
用MS的SQLHELPER类.那个不错
qqshenyunzcz 2009-04-23
  • 打赏
  • 举报
回复
老紫竹 才说了的 不要用static来修饰连接变量。。。。
呵呵 我经常用他来保存变量的状态。。。好像效果蛮好。。。
kfps8kfps8 2009-04-22
  • 打赏
  • 举报
回复
学习...
cat_hsfz 2009-04-22
  • 打赏
  • 举报
回复
static一定死啊,每个用户操作都要一个独立的Connection,你现在相当于一个人在用Connection时另一个人也可能插进来用,当然有问题啊!
ak4740 2009-04-22
  • 打赏
  • 举报
回复
支持大家的观点
gui0605 2009-04-22
  • 打赏
  • 举报
回复
数据库的连接你都要写成静态的,人多访问不出问题才怪。
建议你别自己写了,直接用MS的SqlHelper就好了
zsuswy 2009-04-22
  • 打赏
  • 举报
回复
protected static OleDbConnection con = new OleDbConnection();
protected static OleDbCommand cmd = new OleDbCommand();

你的连接串是静态的,导致所有的用户只能公用一个连接,用户一多自然就慢了。
人生就是赌 2009-04-22
  • 打赏
  • 举报
回复
把方法与变量有点混了
方法可以是static,确实比较方便,但是static变量和方法不一样,而用户最终使用的是数据,也可以说是变量
static只有一个实例,并发时会有多人改变其值,数据会错乱,而把connection声明为static,则并发时第一用户还没有使用完,被第二用户关闭了连接,而当第一用户需要关闭连接时,却没有可以关闭的连接,这是报错的原因
zky0901 2009-04-22
  • 打赏
  • 举报
回复
我在这上面看到某位用户说是static与实例方法都可以使用,而且我觉得使用static省得实例化,方便一些,难道static就限定只有一个用户吗??
rtdb 2009-04-22
  • 打赏
  • 举报
回复
你这都是static的,难道是只想支持一个用户的么?

一但有并发请求过来,肯定会出错的。


BTW,给出错误信息才好判断的说。
人生就是赌 2009-04-22
  • 打赏
  • 举报
回复
兄弟,把这些类成员都在方法内声明


protected static OleDbConnection con = new OleDbConnection();
protected static OleDbCommand cmd = new OleDbCommand();

62,268

社区成员

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

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

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

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