我之前从未使用过"appSettings".如何在C#中配置它以与SqlConnection一起使用,这就是我用于"ConnectionStrings"的内容
SqlConnection con = new SqlConnection();
con.ConnectionString = ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString;
Run Code Online (Sandbox Code Playgroud)
这就是我对"appSettings"的看法
SqlConnection con = new SqlConnection();
con = ConfigurationManager.AppSettings("ConnectionString");
Run Code Online (Sandbox Code Playgroud)
但它不起作用.
我正在创建一个项目,我需要在单个sql连接中运行2-3个sql命令.这是我写的代码:
SqlConnection con = new SqlConnection(@"Data Source=(LocalDB)\v11.0;AttachDbFilename=|DataDirectory|\project.mdf;Integrated Security=True");
con.Open();
SqlCommand cmd = new SqlCommand("select * from " + mytags.Text + " ", con);
SqlDataReader rd = cmd.ExecuteReader();
if (rd.Read())
{
con.Close();
con.Open();
SqlCommand cmd1 = new SqlCommand("insert into " + mytags.Text + " values ('fname.lname@gmail.com','" + TextBox3.Text + "','" + TextBox4.Text + "','" + TextBox5.Text + "','"+mytags.Text+"')", con);
cmd1.ExecuteNonQuery();
label.Visible = true;
label.Text = "Date read and inserted";
}
else
{
con.Close();
con.Open();
SqlCommand cmd2 = new SqlCommand("create table " …Run Code Online (Sandbox Code Playgroud) 我有一个简单的静态类,其中包含一些方法.每个方法都打开一个SqlConnection,查询数据库并关闭连接.这样,我确信我总是关闭与数据库的连接,但另一方面,我不喜欢总是打开和关闭连接.下面是我的方法的示例.
public static void AddSomething(string something)
{
using (SqlConnection connection = new SqlConnection("..."))
{
connection.Open();
// ...
connection.Close();
}
}
Run Code Online (Sandbox Code Playgroud)
考虑到方法在静态类中,我是否应该有一个包含单个SqlConnection的静态成员?我该如何以及何时放弃它?什么是最佳做法?
我通常使用这样的代码:
using (var connection = new SqlConnection(ConfigurationManager.ConnectionStrings["MyConn"].ConnectionString))
{
var command = connection.CreateCommand();
command.CommandText = "...";
connection.Open();
command.ExecuteNonQuery();
}
Run Code Online (Sandbox Code Playgroud)
我会command自动处理吗?或者不是,我必须把它包装成using块?是否需要处理SqlCommand?
以下哪两个例子是正确的?(或哪一个更好,我应该使用)
在MSDN中,我发现了这个:
private static void ReadOrderData(string connectionString)
{
string queryString = "SELECT OrderID, CustomerID FROM dbo.Orders;"
using (SqlConnection connection = new SqlConnection(connectionString))
{
SqlCommand command = new SqlCommand(queryString, connection);
connection.Open();
SqlDataReader reader = command.ExecuteReader();
// Call Read before accessing data.
while (reader.Read())
{
Console.WriteLine(String.Format("{0}, {1}", reader[0], reader[1]));
}
// Call Close when done reading.
reader.Close();
}
}
Run Code Online (Sandbox Code Playgroud)
但是,查看其他页面,一些用户建议这样做:
private static void ReadOrderData(string connectionString)
{
string queryString = "SELECT OrderID, CustomerID FROM dbo.Orders;";
using (SqlConnection connection = new SqlConnection(connectionString))
{
using …Run Code Online (Sandbox Code Playgroud) 我有很多相当工作的代码已经存在了几个月,今天我看到记录了以下异常:
System.InvalidOperationException
SqlConnection does not support parallel transactions.
at System.Data.SqlClient.SqlInternalConnection.BeginSqlTransaction(
IsolationLevel iso, String transactionName)
at System.Data.SqlClient.SqlConnection.BeginTransaction(
IsolationLevel iso, String transactionName)
at my code here
Run Code Online (Sandbox Code Playgroud)
我想调查为什么会抛出这个异常.我已经阅读了MSDN描述,BeginTransaction()并且它说的很好,有时可以抛出这个异常.
这个例外究竟意味着什么?我应该寻找的代码有什么不足之处?
Dapper隐含地期望连接在使用时打开.为什么不自己打开和关闭它?这不是简单的连接管理吗?
我问,因为我和同事一直在寻找有关连接池的幕后故事的性质,以及如何在多个命令之间保持连接打开,或打开和关闭它有任何好处对于每个命令.
可能重复:
SQL Server查询以查找所有当前数据库名称
我试图弄清楚如何在连接到服务器之后列出数据库而不首先指定数据库.
sqlConnection1 = new SqlConnection("Server=" + sqlServer + ";Database=" + database +
";User ID=" + userName + ";Password=" + password + ";Trusted_Connection=False;");
Run Code Online (Sandbox Code Playgroud)
所以基本上我想要的是最终用户连接到sql server,然后有一个下拉列表,填充了他们可以连接和查询的db列表.
想法?
我看到在大多数样本中,SqlCommand都是这样使用的
using (SqlConnection con = new SqlConnection(CNN_STRING))
{
using (SqlCommand cmd = new SqlCommand("Select ID,Name From Person", con))
{
SqlDataAdapter da = new SqlDataAdapter(cmd);
DataSet ds = new DataSet();
da.Fill(ds);
return ds;
}
}
Run Code Online (Sandbox Code Playgroud)
我知道为什么我们使用"使用"声明.但是SqlCommand没有包含Close()方法,所以我们应该在using语句中使用它
SqlClient.SqlDataReader是否是.NET托管对象?为什么我们必须调用Close()方法显式关闭一个打开的连接?不应该超出这个对象的范围自动关闭这个?垃圾收集器不应该清理干净吗?
请帮助我了解这里的最佳做法.
我在这里看到了一个相关的问题,它进一步说明了我对Web应用程序的问题.问题是我们的连接不畅.详细错误在这里:
Exception: System.InvalidOperationException
Message: Timeout expired. The timeout period elapsed prior to obtaining a connection from the pool. This may have occurred because all pooled connections were in use and max pool size was reached.
Source: System.Data
at System.Data.SqlClient.SqlConnectionPoolManager.GetPooledConnection(SqlConnectionString options, Boolean& isInTransaction)
at System.Data.SqlClient.SqlConnection.Open()
Run Code Online (Sandbox Code Playgroud)
要解决这个问题,我必须显式关闭所有SQLDataReader对象.
我正在使用.NET Framework 3.5
sqlconnection ×10
c# ×8
.net ×4
ado.net ×4
sql ×3
sqlcommand ×3
.net-3.5 ×1
asp.net ×1
dapper ×1
data-binding ×1
database ×1
dispose ×1
sql-server ×1
transactions ×1