stackoverflow的第一次用户,但我已经在Coding Horror上进行了开发.
我遇到了上述错误,令人头疼.我安装了ELMAH和Google Analytics,随着网站流量的增加,我看到此错误的次数也增加了.
我已尽最大努力遵循Microsoft的原则:http://msdn.microsoft.com/en-us/library/ms971481.aspx在整个开发过程中,我根据多个建议来源尽可能地优化了我的代码网络.
我在公共类中有我的SqlConnection;
Public Class pitstop
Public Shared oConn As New System.Data.SqlClient.SqlConnection
Public Shared Sub doConnect()
If oConn.State = ConnectionState.Closed Then
oConn.ConnectionString = System.Configuration.ConfigurationManager.ConnectionStrings("pitstopConnectionString").ConnectionString
oConn.Open()
End If
End Sub
Public Shared Sub doGarbage()
oConn.Dispose()
End Sub
' /// other code ///
End Class
Run Code Online (Sandbox Code Playgroud)
在我的主要应用程序页面中,我做了同样的事情:
Private Sub doPump()
pitstop.doConnect()
Dim cmd As New System.Data.SqlClient.SqlCommand("doGetCategory", pitstop.oConn)
Dim dt As New DataTable
Dim dr As SqlDataReader
cmd.Parameters.Add("@cat", SqlDbType.Int)
cmd.Parameters("@cat").Value = CType(Request.QueryString("id"), Integer)
cmd.CommandType = CommandType.StoredProcedure
dr …Run Code Online (Sandbox Code Playgroud) 我有一个带有许多方法的dal层,它们都调用存储过程,一些返回列表(所以使用SqlDataReader),其他只有特定值.
我有一个帮助方法,创建SqlCommand:
protected SqlCommand CreateSprocCommand(string name, bool includeReturn, SqlDbType returnType)
{
SqlConnection con = new SqlConnection(this.ConnectionString);
SqlCommand com = new SqlCommand(name, con);
com.CommandType = System.Data.CommandType.StoredProcedure;
if (includeReturn)
com.Parameters.Add("ReturnValue", returnType).Direction = ParameterDirection.ReturnValue;
return com;
}
Run Code Online (Sandbox Code Playgroud)
现在我的平均(过度简化)方法体看起来像:
SqlCommand cmd = CreateSprocCommand("SomeSprocName"); //an override of the above mentioned method
try {
cmd.Connection.Open();
using (var reader = cmd.ExecuteReader()) {
//some code looping over the recors
}
//some more code to return whatever needs to be returned
}
finally {
cmd.Connection.Dispose(); …Run Code Online (Sandbox Code Playgroud) 有没有一种很好的方法来解析SQL语句以确保它只包含一个SELECT语句而没有其他内容?我正在使用C#,System.Data.SqlConnection和MS SQL Server
这让我疯了;)
我有这个存储过程...
ALTER PROCEDURE [dbo].[sproc_FindFoundries]
(@materials varchar(1000),
@capabilities varchar(1000))
AS
BEGIN
/* insert SQL code here */
END
Run Code Online (Sandbox Code Playgroud)
该过程接受两个逗号分隔的字符串.在我的应用程序中,我有以下代码.
BCDataContext db = new BCDataContext();
SqlParameter prmMaterials = new SqlParameter("materials", SqlDbType.VarChar, 1000);
prmMaterials.Value = materialList;
SqlParameter prmCapability = new SqlParameter("capabilities", SqlDbType.VarChar, 1000);
prmCapability.Value = capabilityList;
SqlConnection cn = new SqlConnection(db.Connection.ConnectionString);
SqlCommand cmd = new SqlCommand("sproc_FindFoundries", cn);
cmd.Parameters.Add(prmMaterials);
cmd.Parameters.Add(prmCapability);
SqlDataAdapter da = new SqlDataAdapter(cmd);
DataSet ds = new DataSet();
da.Fill(ds);
Run Code Online (Sandbox Code Playgroud)
当我执行代码时,我收到错误
过程或函数[sproc_name]需要参数'@materials',这是未提供的.
当我尝试填充数据集时.在测试时,我已经验证两个参数都包含数据并且不为空.有没有我错过的东西?非常感谢第二双眼睛.
谢谢.
我想连接到在线SQL数据库.要做到这一点,我使用此代码:
SqlConnection conn = new SqlConnection("Data Source=77.243.225.193;User ID=rune;Password=secret;database=test");
conn.Open();
Textbox.Text = "ServerVersion: " + conn.ServerVersion.ToString() + "\n\r";
Textbox.Text = "State: " + conn.State.ToString();
Run Code Online (Sandbox Code Playgroud)
我刚从互联网上获取代码,因为这是我第一次使用它.不知何故,这不起作用,因为它说它无法连接到数据库.谁能解释我为什么?
谢谢!
我正试图用一个Using()声明SqlConnection.
我已经制作了这样SqlConnection的页面属性......
public SqlConnection baseConnection
{
get { return new SqlConnection(ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString); }
}
Run Code Online (Sandbox Code Playgroud)
然后创建了using()这样的声明......
using (baseConnection)
{
SqlCommand select = new SqlCommand("SELECT * FROM TABLE", baseConnection);
baseConnection.Open();
SqlDataReader reader = select.ExecuteReader();
//... other irrelevant code
}
Run Code Online (Sandbox Code Playgroud)
但是当代码运行时,我得到一个例外
异常详细信息:System.InvalidOperationException:ExecuteReader需要打开且可用的连接.连接的当前状态已关闭
我理解异常,我不明白,为什么我打开它时连接没有打开baseConnection.Open()?
我在整个站点使用此连接,并且我想将它作为页面属性放在自定义基类中,因此我不必继续键入它.这是不允许的?
第一次在stackoverflow上。我正在学习如何在WebForm页面中管理SqlConnection,并且我想要达到最佳实践。在我的特定情况下,我有一个循环,如果我没有为循环的每个迭代设置新的SqlConnection(错误是关于在关闭阅读器时尝试读取的信息),则我将无法运行代码而不会出错。 。因此,我在PageLoad方法中声明了这一点:
private SqlConnection con;
protected void Page_Load(object sender, EventArgs e)
{
con = new SqlConnection(connectionString);
}
Run Code Online (Sandbox Code Playgroud)
然后我有这个:
private int conta(int padre)
{
string SQL = "SELECT * FROM categories WHERE idp=@idpadre";
SqlCommand cd = new SqlCommand(SQL, con);
cd.Parameters.AddWithValue("@idpadre", padre);
int sub=0;
try
{
if ((con.State & ConnectionState.Open) <= 0)
{
con.Open();
}
using (SqlDataReader reader = cd.ExecuteReader())
{
while (reader.Read())
{
sub++;
}
}
}
catch (Exception err)
{
lbl.Text = "Errore conta!";
lbl.Text += err.Message;
}
finally
{ …Run Code Online (Sandbox Code Playgroud) 我正在尝试将连接字符串保存到配置文件,但密码未提交.
这是我正在使用的代码:
using (var con = new SqlConnection(string.Format("Data Source={0};Initial Catalog={3};User ID={1};Password={2};",
textBox_SqlServer.Text, textBox_Username.Text, textBox_Password.Text, comboBox_DatabaseName.Text)))
{
// test connection before continuing
con.Open();
configs.ApplicationConfiguration.SetConnectionString(con.ConnectionString);
}
Run Code Online (Sandbox Code Playgroud)
一切都很好,直到con.ConnectionString它不包括密码.我需要做什么呢?当然,当我去检索它时,密码就不存在了.
如何设置密码呢?
我们在SqlConnection.Open()上获得Timeout过期异常.
以下是代码:
public int ExecuteNonQuery(SqlParameter[] param, string strSPName)
{
using (SqlConnection conn = new SqlConnection(_connStr))
{
int i = 0;
using (SqlCommand cmd = new SqlCommand(strSPName, conn))
{
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.AddRange(param);
conn.Open();
i = cmd.ExecuteNonQuery();
}
return i;
}
}
Run Code Online (Sandbox Code Playgroud)
语句中的return关键字是否using会打开连接,从而导致此问题?
c# ado.net database-connection sqlconnection timeoutexception
我试图在带有SqlConnection变量的using块中进行异步查询.
这是我的代码:
using (var conn = GetNewConnection())
{
var query = "DELETE FROM blah blah blah WHERE blah blah;"
conn.Open();
using (var cmd = new NpgsqlCommand(query, conn))
{
cmd.Parameters.AddRange(new[]
{
new NpgsqlParameter("@a", A),
new NpgsqlParameter("@b", B)
});
cmd.ExecuteNonQueryAsync();
}
}
Run Code Online (Sandbox Code Playgroud)
如上所示,using块的最后一行是异步任务.在这种情况下,连接是否会打开,直到异步查询完成?为什么或者为什么不?
应该做些什么来确保完成异步任务?这样做的更好方法是什么?
sqlconnection ×10
c# ×9
.net ×2
ado.net ×2
asp.net ×2
sql-server ×2
asynchronous ×1
database ×1
loops ×1
mysql ×1
properties ×1
query-parser ×1
sql ×1
sqlcommand ×1
sqlparameter ×1
using ×1