public class db
{
public static string connectionString =
WebConfigurationManager.ConnectionStrings["connectString"].ConnectionString;
public static SqlConnection OpenConnection()
{
SqlConnection connection = new SqlConnection(connectionString);
connection.Open();
return connection;
}
}
Run Code Online (Sandbox Code Playgroud)
我看到这样的代码,它尖叫着错!它适用于ASP.NET(2.0).我明白这是错的.
对于一个你不应该打开SqlConnection并返回它和两个为什么你要进行静态SqlConnection?如果有多个人同时尝试使用它,这不会产生问题吗?
如果执行SqlCommand并超时,则相应的SqlConnection是否已关闭和/或处理?
我有一些要执行的代码,如下所示。但是在第二次迭代中,我不断收到异常“此SqlTransaction已完成;它不再可用”。有人可以帮我指出我在这里做错了吗?谢谢!
SqlConnection cn = (SqlConnection)SqlConnectionManager.Instance.GetUserConnection(user);
cn.Open();
try
{
foreach (Master mRecord in masterList)
{
if (sqlTransaction == null)
sqlTransaction = cn.BeginTransaction();
SqlCommand cm = cn.CreateCommand();
cm.Transaction = sqlTransaction;
cm.CommandType = CommandType.StoredProcedure;
cm.CommandText = "pr_InsertRecords";
try
{
cm.ExecuteNonQuery();
Debug.WriteLine("Auditor.Write: end sql table value param");
sqlTransaction.Commit();
sqlTransaction.Dispose();
}
catch (Exception Ex)
{
Debug.WriteLine(" Exception message: " + Ex.Message);
if (Ex.InnerException != null)
{
Debug.WriteLine("Inner exception message" + Ex.InnerException.Message);
}
sqlTransaction.Rollback();
}
}
}
finally
{
cn.Close();
}
Run Code Online (Sandbox Code Playgroud) 我正在使用此代码来获取数据:
Dim connetionString As String
Dim connection As SqlConnection
Dim sqlq As String
sqlq = "select top 1 * from table1 where smth"
Dim ds As New DataSet
connetionString = "Data Source=db;Initial Catalog=ic;User ID=id;Password=pass"
connection = New SqlConnection(connetionString)
Try
Using connection
Dim command As SqlCommand = New SqlCommand(sqlq, connection)
connection.Open()
Dim reader As SqlDataReader = command.ExecuteReader()
If reader.HasRows Then
Do While reader.Read()
x = reader.GetString(5)
Loop
End If
reader.Close()
End Using
Catch ex As Exception
End Try
Run Code Online (Sandbox Code Playgroud)
这种类型的连接(与不同的sqlq [查询])我在diffenrent函数中使用了很多,每次我关闭连接.我想优化它,以便获取数据所需的时间更少.我怎么做?
我一直收到连接错误.我知道这些信息是正确的,因为我在最后几分钟内已经多次尝试使用SSMS,所以问题出在C#连接字符串中.根据各种谷歌搜索,语法是正确的,只是它不起作用.
try
{
// Get the connection information.
GetSQLConnectInfo(ref sConnect);
// Formulate the connection string.
String strConnect = String.Format("Server=myserver;Database=mydb;User Id=myusername;Password=mypassword;Trusted_Connection=yes;connection timeout=30");
// DATABASE: Create the connection.
SqlConnection oConnection = new SqlConnection(strConnect);
oConnection.Open();
if (ConnectionState.Open != oConnection.State)
return false;
return true;
}
catch
{
}
Run Code Online (Sandbox Code Playgroud)
错误返回:用户'myserver\Guest'登录失败.错误代码:-2146232060错误号码:18456
似乎从错误消息判断,Open方法无法识别用户名,因为Open尝试使用来宾帐户,这显然不起作用.
我错过了什么吗?我正在使用SQL Server身份验证.
我想问一下使用数据库连接和关闭它们的常用方法是什么.
这是我的程序,但我在一个例子中看到,connection.Close()将不会执行.
我应该在整个街区使用try-catch吗?因为某种原因,我看到大多数人都没有.
using (SqlConnection connection = new SqlConnection(ConnectionString))
{
using (SqlCommand command = new SqlCommand())
{
command.CommandText = "procedure";
command.Connection = connection;
command.CommandType = CommandType.StoredProcedure;
tmpParameter = DBUtils.createInSQLParam("@ImageID", SqlDbType.SmallInt, htmlImageId);
command.Parameters.Add(tmpParameter);
command.Connection.Open();
using (SqlDataReader reader = command.ExecuteReader())
{
htmlImageDetails = GetHtmlImageDetailsFromReader(reader, true, out newId);
reader.Close();
}
connection.Close();
return htmlImageDetails;
}
}
Run Code Online (Sandbox Code Playgroud) 由于某些原因,我无法使用我的连接字符串建立数据连接.我正在使用以下代码
var connectionString = ConfigurationManager.ConnectionStrings["connection"].ConnectionString;
SqlCommand cmd = new SqlCommand();
SqlConnection con = new SqlConnection(connectionString);
cmd.Connection = connectionString;
cmd.CommandType = CommandType.StoredProcedure;
cmd.CommandText = " dbo.SelectAll";
SqlParameter param = new SqlParameter("@tradeDate","201401");
param.Direction = ParameterDirection.Input;
param.DbType = DbType.String;
cmd.Parameters.Add(param);
Run Code Online (Sandbox Code Playgroud)
但由于某些原因,当我将连接属性初始化为我的命令使用时cmd.Connection = connectioString,是抛出异常,如下所示
无法将类型'string'隐式转换为'System.Data.SqlClient.SqlConnection'
我在ASP项目中遇到以下错误:
The connection was not closed. The connection's current state is open
Run Code Online (Sandbox Code Playgroud)
在SqlConnection对象上调用.open()函数时.
我试过这个:
if (Conn.State != ConnectionState.Closed)
{
Log.Message(xxx);
try
{
Conn.Close();
}
catch (Exception ex)
{
Log.Error(xxxx);
}
}
Conn.Open();
Run Code Online (Sandbox Code Playgroud)
但这仍然会引发错误.Conn对象声明为:
private static readonly SqlConnection Conn = new SqlConnection(xxxx);
Run Code Online (Sandbox Code Playgroud)
知道我应该在哪里寻找解决方案
我知道你需要调用.Close()一个SqlConnection对象,以便在完成后将基础SQL连接释放回池中; 但如果你不这样做,即使超出范围,.NET对象是否仍然留在内存中?我问,因为我正在处理一些遇到内存泄漏的代码,我注意到SqlConnection对象没有被关闭或处理(它们被创建,打开,然后只是被允许超出范围).
如何正确使用一个SqlConnection对象进行多个查询?
SqlConnection connection = new SqlConnection(connString);
static void SqlQuery(SqlConnection conn, string cmdString)
{
using (conn)
{
if (conn.State != ConnectionState.Open)
{
conn.Close();
conn.Open();
}
SqlCommand cmd = conn.CreateCommand();
cmd.CommandText = cmdString;
cmd.ExecuteNonQuery();
}
}
Run Code Online (Sandbox Code Playgroud)
SqlQuery第一次调用后的函数抛出System.InvalidOperationException"ConnectionString属性未初始化"
sqlconnection ×10
c# ×7
sql ×3
.net ×1
.net-3.5 ×1
.net-4.6 ×1
ado.net ×1
asp.net ×1
database ×1
login ×1
memory-leaks ×1
singleton ×1
sql-server ×1
static ×1
vb.net ×1