gpt4 book ai didi

c# - 连接数据库的完美方式?

转载 作者:行者123 更新时间:2023-11-30 15:45:33 26 4
gpt4 key购买 nike

public class SqlHelper
{
public SqlHelper()
{
}
public static SqlConnection GetConnection()
{
SqlConnection conn = new SqlConnection();
conn.ConnectionString = @"Data Source=.\SQLEXPRESS;AttachDbFilename=" + System.Web.HttpContext.Current.Server.MapPath(@"~\App_Data\learn.mdf") + ";Integrated Security=True;User Instance=True";
return conn;
}
public static SqlDataReader ExecuteReader(string sql)
{
SqlConnection con = GetConnection();
con.Open();
SqlCommand cmd = new SqlCommand(sql, con);
SqlDataReader dr = null;
try
{
dr = cmd.ExecuteReader(CommandBehavior.CloseConnection);
}
catch
{
con.Close();
return null;
}
return dr;
}
public static Object ExecuteScalar(string sql)
{
SqlConnection con = GetConnection();
con.Open();
SqlCommand cmd = new SqlCommand(sql, con);
Object val = null;
try
{
val = cmd.ExecuteScalar();
}
catch
{
con.Close();
return null;
}
finally
{
con.Close();
}
return val;

}
public static DataSet ExecuteDataSet(string sql)
{
SqlConnection con = GetConnection();
SqlCommand cmd = new SqlCommand(sql, con);
DataSet ds = new DataSet();
SqlDataAdapter adapt = new SqlDataAdapter(cmd);
try
{
adapt.Fill(ds);
}
catch
{
con.Close();
}
return ds;
}
public static void ExecuteNonQuery(string sql)
{
SqlConnection con = GetConnection();
con.Open();
SqlCommand cmd = new SqlCommand(sql, con);
try
{
cmd.ExecuteNonQuery();
}
finally
{
con.Close();
}
}
}

这是我用来实现对我的数据库的每次访问的类。但我认为我与数据库连接的方式有点夸张,因为每次我需要某些东西时我都必须点击连接功能。以及其他用户也会做同样的事情,这会降低性能。
那么连接数据库的最佳方式是什么——如果更好的话保持连接。注意我在很多页面都用到了数据库!
谢谢

最佳答案

首先,您应该使用“using”语句来确保在发生故障时正确处理所有 ADO.NET 对象:

public static void ExecuteNonQuery(string sql) 
{
using(var con = GetConnection())
{
con.Open();
using(var cmd = new SqlCommand(sql, con))
{
cmd.ExecuteNonQuery();
}
}
}

不过,话虽如此,我并没有真正看到这种方法有什么问题。优点是每次执行一些 SQL 时,连接、命令、适配器和诸如此类的东西都会被正确处理。如果您要创建单个静态 SqlConnection 实例,则会增加连接已在使用中的可能性(例如,当迭代 SqlDataReader 的内容时)。

如果您真的担心它,请提供将连接作为额外参数的重载:

public static void ExecuteNonQuery(string sql, SqlConnection connection) 
{
using(var cmd = new SqlCommand(sql, con))
{
cmd.ExecuteNonQuery();
}
}

这样,调用者可以执行一些不需要多次调用的 SQL,或者他们可以调用您的 GetConnectionMethod 来获取连接,并将其传递给多个调用。

关于c# - 连接数据库的完美方式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5091867/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com