标签: sqlconnection

不允许更改'ConnectionString'属性.连接的当前状态是打开的

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)

asp.net sqlconnection

1
推荐指数
1
解决办法
9393
查看次数

将代码重构为using语句

我有一个带有许多方法的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)

c# using sqlcommand sqlconnection

1
推荐指数
1
解决办法
974
查看次数

解析SQL语句以查看它是否是SELECT语句之外的其他语句?

有没有一种很好的方法来解析SQL语句以确保它只包含一个SELECT语句而没有其他内容?我正在使用C#,System.Data.SqlConnection和MS SQL Server

c# sql-server sqlconnection query-parser

1
推荐指数
1
解决办法
1500
查看次数

过程或函数[sproc_name]需要参数'@materials',这是未提供的

这让我疯了;)

我有这个存储过程...

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',这是未提供的.

当我尝试填充数据集时.在测试时,我已经验证两个参数都包含数据并且不为空.有没有我错过的东西?非常感谢第二双眼睛.

谢谢.

.net c# ado.net sqlconnection sqlparameter

1
推荐指数
1
解决办法
3930
查看次数

C#SqlConnection无法连接

我想连接到在线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)

我刚从互联网上获取代码,因为这是我第一次使用它.不知何故,这不起作用,因为它说它无法连接到数据库.谁能解释我为什么?

谢谢!

c# mysql database sqlconnection

1
推荐指数
1
解决办法
5529
查看次数

使用属性时关闭连接状态

我正试图用一个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()

我在整个站点使用此连接,并且我想将它作为页面属性放在自定义基类中,因此我不必继续键入它.这是不允许的?

c# asp.net sqlconnection properties

1
推荐指数
1
解决办法
408
查看次数

循环内的C#SqlConnection

第一次在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)

c# loops sqlconnection

1
推荐指数
1
解决办法
1916
查看次数

获取ConnectionString时SqlConnection未设置密码

我正在尝试将连接字符串保存到配置文件,但密码未提交.

这是我正在使用的代码:

    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它不包括密码.我需要做什么呢?当然,当我去检索它时,密码就不存在了.

如何设置密码呢?

c# sql-server sqlconnection

1
推荐指数
1
解决办法
252
查看次数

将使用语句返回关键字,保持连接打开?

我们在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

1
推荐指数
1
解决办法
405
查看次数

如何在块中使用块中的SqlConnection打开异步查询?

我试图在带有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块的最后一行是异步任务.在这种情况下,连接是否会打开,直到异步查询完成?为什么或者为什么不?

应该做些什么来确保完成异步任务?这样做的更好方法是什么?

.net c# sql asynchronous sqlconnection

1
推荐指数
1
解决办法
47
查看次数