读书人

SqlConnection链接字符串的有关问题

发布时间: 2012-04-11 17:42:33 作者: rapoo

SqlConnection链接字符串的问题
我有一个数据库访问类:
public class SqlHelper
{

private static SqlConnection connection = null;

private static String conString = "server=192.168.0.1;User ID=sa;Password=;database=HrSysTool;Connection Reset=FALSE ";

public static SqlConnection Connection
{
get
{
if (connection == null)
{
//重新创建
connection = SqlHelper.ConnectionDB();
}
if (connection != null && connection.State == ConnectionState.Closed)
{
//重新连接
connection.Open();
}
return connection;
}
}

public static SqlConnection ConnectionDB()
{
SqlConnection conn = null;
try
{
conn = new SqlConnection(conString);
conn.Open();
SqlHelper.connection = conn;


}
catch
{
throw new Exception( "未配置数据源连接信息! ");
SqlHelper.connection = null;
}



return conn;
}

/// <summary>
/// 关闭数据连接
/// </summary>
/// <returns> </returns>
public static bool DisConnectionDB()
{
try
{
if (SqlHelper.connection != null && SqlHelper.connection.State != ConnectionState.Closed)
{
//关闭数据源

SqlHelper.connection.Close();
}
SqlHelper.connection = null;
return true;
}
catch (Exception)
{
return false;
}
}

/// <summary>
/// 查询方法,适用于返回DataSet数据的SQL语句,使用当前系统的Connection


/// </summary>
/// <param name= "cmdType "> Command类型 </param>
/// <param name= "cmdText "> SQL脚本 </param>
/// <param name= "commandParameters "> SQL参数集合 </param>
/// <returns> 返回DataSet数据集 </returns>
public static DataSet FillDataSet(CommandType cmdType, string cmdText, params SqlParameter[] commandParameters)
{
SqlCommand cmd = new SqlCommand();
SqlConnection conn = SqlHelper.Connection;
DataSet dataSet = new DataSet();

try
{
PrepareCommand(cmd, conn, null, cmdType, cmdText, commandParameters);
SqlDataAdapter dataAdapter = new SqlDataAdapter(cmd);
dataAdapter.Fill(dataSet);
cmd.Parameters.Clear();
return dataSet;
}
catch
{
throw;
}
}

/// <summary>
/// 执行方法,适用于不返回数据的SQL语句,使用当前系统的Connection
/// </summary>
/// <param name= "cmdType "> Command类型 </param>
/// <param name= "cmdText "> SQL脚本 </param>
/// <param name= "commandParameters "> SQL参数集合 </param>


/// <returns> 返回影响的行数 </returns>
public static int ExecuteNonQuery(CommandType cmdType, string cmdText, params SqlParameter[] commandParameters)
{

SqlCommand cmd = new SqlCommand();

using (SqlConnection conn = SqlHelper.Connection)
{
PrepareCommand(cmd, conn, null, cmdType, cmdText, commandParameters);
int val = cmd.ExecuteNonQuery();
cmd.Parameters.Clear();
return val;
}
}

/// <summary>
/// 执行方法,适用于不返回数据的SQL语句,通过链接字符串创建的Connection
/// </summary>
/// <param name= "connectionString "> 数据库链接字符串 </param>
/// <param name= "cmdType "> Command类型 </param>
/// <param name= "cmdText "> SQL脚本 </param>
/// <param name= "commandParameters "> SQL参数集合 </param>
/// <returns> 返回影响的行数 </returns>
public static int ExecuteNonQuery(String connectionString, CommandType cmdType, string cmdText, params SqlParameter[] commandParameters)
{

SqlCommand cmd = new SqlCommand();

using (SqlConnection conn = new SqlConnection(connectionString))
{
PrepareCommand(cmd, conn, null, cmdType, cmdText, commandParameters);
int val = cmd.ExecuteNonQuery();


cmd.Parameters.Clear();
return val;
}
}

.................
}
代码比较长,希望不要晕,现在的问题是,当我当前数据库链接的的方式系统一切正常,但只要我用过一次ExecuteNonQuery(String connectionString, CommandType cmdType, string cmdText, params SqlParameter[] commandParameters),就是通过其他途径 如:链接字符串、其他的SqlConnection,或者其他SqlConnection的SqlTransaction 创建的 SqlConnection,那么再用 当前数据库链接的时候,就会报错:InvalidOperationException: ConnectionString 属性尚未初始化,也就是说经过这样一个动作,SqlConnection的链接字符串被搞丢了,

请分析一下,这个代码的漏洞在哪儿???


[解决办法]
最好用下conn.Open();和conn.Close();
[解决办法]
ExecuteNonQuery(String connectionString, CommandType cmdType, string cmdText, params SqlParameter[] commandParameters)后
要关闭连接
[解决办法]
是挺长的
[解决办法]
是的
[解决办法]
代码好多,暂时没有看出来,
不过你的编码好像很随意,最起码数据库应该尽量晚开,尽量早关。
连接字符串为什么不写在web.config里?
[解决办法]
代码太长了
[解决办法]
string connstr = "server=192.168.0.1;User ID=sa;Password=;database=HrSysTool;Connection Reset=FALSE ";
System.Data.SqlClient.SqlConnection conn1 = null;
using (conn1 = new System.Data.SqlClient.SqlConnection(connstr))
{
conn1.Open();
Console.WriteLine(conn1.ConnectionString);
}
Console.WriteLine(conn1.ConnectionString);
Console.ReadLine();
因为sqlconnection关闭后其ConnectionString属性会被清空。
[解决办法]
看了 我就晕了 还有好多没用过的 学习了

读书人网 >C#

热点推荐