相关疑难解决方法(0)

阅读app.config贵吗?

毫无疑问,我还没有受到任何阅读速度瓶颈的影响.我要知道; 如果经常阅读app.config是一个糟糕的编程选择.我知道数据库操作变得昂贵.

在我的情况下,我不是在阅读我自己的应用程序的app.config,而是另一个项目的,如下所示:

private string GetAppConfigValue(string key)
{
    ExeConfigurationFileMap fileMap = new ExeConfigurationFileMap();
    fileMap.ExeConfigFilename = GetConfigFilePath();
    Configuration appConfig = ConfigurationManager.OpenMappedExeConfiguration(fileMap, ConfigurationUserLevel.None);
    return appConfig.AppSettings.Settings[key].Value;
}
Run Code Online (Sandbox Code Playgroud)

场景:我有一个管理器类(只有一个这样的类),我必须从物理路径指定的配置文件中读取几个值(3到4),但很多次.需要我有几个成员变量来存储app.config文件中的值吗?什么是最好的方法.谢谢.

c# performance coding-style app-config

28
推荐指数
2
解决办法
1万
查看次数

重用SqlConnection和SqlDataReader

如果我想在不同的表上运行多个SELECT查询,我可以为所有这些表使用相同的SqlDataReader和SqlConnection吗?以下是明智的吗?(我输入的速度很快,所以缺少try/catch):

MySqlCommand myCommand = new MySqlCommand("SELECT * FROM table1", myConnection);

myConnection.Open();
SqlDataReader myDataReader = myCommand.ExecuteReader();

while(myReader.Read())
{
    //Perform work.
}

myCommand.commandText = "SELECT * FROM table2";

myReader = myCommand.ExecuteReader();

while(myReader.Read())
{
    //Perform more work
}

myReader.Close();
myConnection.Close();
Run Code Online (Sandbox Code Playgroud)

非常感谢.

.net c# sqldatareader

11
推荐指数
1
解决办法
2万
查看次数

错误:ExecuteReader需要打开且可用的连接.连接的当前状态是打开的

我有mvc 4网站,下面有DataHelperClass来执行查询.我的问题有时候,网站通过例外作为标题.我用block来配置SqlCommand和SqlDataAdapter但没有成功.

请帮帮我,抱歉我的英语.

        try
        {
            if (_conn.State == ConnectionState.Closed)
                _conn.Open();

            using (SqlCommand sqlCommand = new SqlCommand(query, _conn))
            {
                sqlCommand.CommandType = CommandType.StoredProcedure;

                if (parameters != null)
                    sqlCommand.Parameters.AddRange(parameters);

                //// check transaction is exist
                if (_trans != null)
                    sqlCommand.Transaction = _trans;

                DataTable dt = new DataTable();
                using (SqlDataAdapter sqlDataAdapter = new SqlDataAdapter(sqlCommand))
                {
                    sqlDataAdapter.Fill(dt);
                }

                return dt;
            }
        }
        finally
        {
            //// close connection automatically if transaction is not exist
            if (_trans == null) { _conn.Close(); }
        }
Run Code Online (Sandbox Code Playgroud)

c# asp.net-mvc-4

11
推荐指数
1
解决办法
3万
查看次数

何时在c#中使用SqlConnection.ClearAllPools()

我注意到sqlWrite.ExecuteNonQuery();在几秒钟内执行200次插入查询后,我的代码出错了.我一直以为这using将确保资源得到正确使用,并且不需要做任何事情.这是我第一次遇到这个错误而且我已经用sql/c#处理了近3年不同的事情.

using (SqlConnection varConnection = Locale.sqlConnectOneTime(Locale.sqlDataConnectionDetails)) 
{
    using (var sqlWrite = new SqlCommand(preparedCommand, varConnection)) 
    {
        sqlWrite.Parameters.AddWithValue("@var_agr_fname", var_agr_fname == "" ? (object) DBNull.Value : var_agr_fname);
        sqlWrite.ExecuteNonQuery();
    }
}


public static SqlConnection sqlConnectOneTime(string varSqlConnectionDetails)
{
    var sqlConnection = new SqlConnection(varSqlConnectionDetails);
    try
    {
        sqlConnection.Open();
    }
    catch
    {
        DialogResult result = MessageBox.Show(new Form {TopMost = true},
                                              "B??d po??czenia z baz? danych. Czy chcesz spróbowa? nawi?zac po??czenie ponownie?",
                                              "B??d po??czenia (000001)",
                                              MessageBoxButtons.YesNo,
                                              MessageBoxIcon.Stop);
        if (result == DialogResult.No)
        {
            if (Application.MessageLoop)
            { …
Run Code Online (Sandbox Code Playgroud)

c# sql-server

9
推荐指数
2
解决办法
7587
查看次数

ExecuteScalar()返回null,尽管数据已添加到DB

我有一个代码如下所示,我尝试将数据插入表中并返回新元素的ID(由自动增量给出).

int newEquipmentID = new int();

query = database.ParameterizedQueryString("INSERT INTO Equipment (EquipmentTypeID) VALUES ({0})", "equipmenttypeID");

newEquipmentID = (int)database.Connection.ExecuteScalar(query, DefaultTimeout, equipment.EquipmentTypeID);
Run Code Online (Sandbox Code Playgroud)

但它失败并返回null,就好像尚未添加新项目一样.但实际上我可以看到新项目在数据库中进行简单的咨询.

我的问题是"何时"将数据实际添加到数据库中,如何获取新添加项目的ID.谢谢!

c# sql t-sql ado.net executescalar

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

当前上下文中不存在名称"sqlDbType"

我要编辑文本框值..但我看到有问题

  protected void btn_edit_Click(object sender, EventArgs e)
    {
        DatabaseConnector con = new DatabaseConnector().CreateInstance();
        SqlCommand com = new SqlCommand("UPDATE tbl_BinCardManager SET ItemName = @ItemName WHERE ItemNo = @ItemNo");
        com.Parameters.Add("@ItemName",sqlDbType.VarChar);
        con.Open();
        cmd.ExecuteNonQuery();
        con.Close();

    }
Run Code Online (Sandbox Code Playgroud)

错误1:

当前上下文中不存在名称"sqlDbType"

错误2:

'ERPSystem.DatabaseConnector'不包含'Open'的定义,也没有扩展方法'Open'接受类型'ERPSystem.DatabaseConnector'的第一个参数可以找到(你是否缺少using指令或汇编引用?)

我的DBConnector类是:

 class DatabaseConnector
{
    private DatabaseConnector databaseConnector;
    private string connectionString = "Data Source=lernlap;Initial Catalog=ERPSystemDB;User ID=sa;Password=sa123";

    public DatabaseConnector()
    {

    }

    private SqlConnection connection;

    private bool Connect()
    {
        try
        {
            connection = new SqlConnection(connectionString);
            connection.Open();
            return true;
        }
        catch(Exception) {

            return false;

        }
    }

    internal DatabaseConnector …
Run Code Online (Sandbox Code Playgroud)

c# c#-4.0

7
推荐指数
2
解决办法
1万
查看次数

'ExecuteReader需要一个开放且可用的连接.连接的当前状态是打开的'

用C#编写的一个相当大的Web应用程序不断抛出2个错误:

'ExecuteReader需要一个开放且可用的连接.连接的当前状态是打开的.并且'读取器关闭时无效尝试调用读取.'

这些错误是偶然的 - 用于在95%的时间内加载精细的页面,但最近它们变得流行,它们一直在发生并且基本上削弱了应用程序的功能.

Web应用程序高度依赖于MS SQL数据库,并且错误似乎不仅限于一个页面,而是几乎所有连接到数据库的页面.

查询按如下方式执行:

Database.Open(); // Custom class that has our connection string hard coded.

string query = "SELECT * FROM table"; // (dummy query)
SqlCommand command = new SqlCommand(query, Database.Conn);

SqlDataReader reader = null;

try {
    reader = command.ExecuteReader(CommandBehaviour.CloseConnection);

    if (reader.HasRows) {

        while (reader.Read()) {
            // Do something with the data.
        }
   }
    reader.Close();
}
catch (Exception e) {
    throw new Exception(e.Message);
}
finally {
    if (reader != null) {
        reader.Close();
    }
}
Run Code Online (Sandbox Code Playgroud)

我在网上研究过这些错误,并且我已经看到了一些我试过无用的潜在解决方案:

将代码的各个部分放在using()块中.为阅读器指定CommandBehaviour.CloseConnection.检查MARS是否已启用.确保每次都创建新的连接对象. …

c# t-sql exception sqldatareader

6
推荐指数
2
解决办法
1万
查看次数

连接池可能存在切断的连接

我有多个线程访问同一个数据库(具有相同的连接字符串).每个帖子:

  • 使用相同的连接字符串创建自己的SqlConnection实例
  • 使用下面的代码在需要时打开它自己的连接实例

        try
        {
            wasOpened = connection.State == ConnectionState.Open;
    
            if (connection.State == ConnectionState.Closed)
            {
                connection.Open();
            }
        }
        catch (Exception ex)
        {
            throw new Exception(string.Format("Connection to data source {0} can not be established! Reason: {1} - complete stack {2}",
                                              connection.Database, ex.Message, ex.StackTrace == null ? "NULL" : ex.StackTrace.ToString()));
        }
    
    Run Code Online (Sandbox Code Playgroud)

到目前为止,我们已在2台服务器上测试了此代码,并且有一台服务器有时会在SqlConnection.Open方法中抛出异常.这是我们从catch块获得的异常消息:

无法建立与数据源xyz的连接!原因:操作无效.连接已关闭. - 完整的堆栈

在System.Data.SqlClient.SqlConnection.OpenConnection()
处于System.Data.SqlClient.SqlConnection.OpenConnection()
处于System.Data.SqlClient.SqlConnection.Open()

检查SqlConnection.GetOpenConnection方法显示innerConnection为null:

internal SqlInternalConnection GetOpenConnection()
{
    SqlInternalConnection innerConnection = this.InnerConnection as SqlInternalConnection;
    if (innerConnection == null)
    {
        throw ADP.ClosedConnectionError();
    }
    return innerConnection;
} …
Run Code Online (Sandbox Code Playgroud)

.net c# ado.net connection-pooling sqlconnection

6
推荐指数
2
解决办法
1万
查看次数

InvalidOperationException未关闭连接.连接的当前状态是打开的

为什么此代码会抛出无效的操作异常?

private SqlCommand cmd; // initialized in the class constructor

public void End(string spSendEventNotificationEmail) {
  try {
    cmd.CommandText = spSendEventNotificationEmail;
    cmd.Parameters.Clear();
    cmd.Parameters.Add("@packetID", SqlDbType.Int).Value = _packetID;
    cmd.Parameters.Add("@statusID", SqlDbType.Int).Value = _statusID;
    cmd.Parameters.Add("@website", SqlDbType.NVarChar, 100).Value = Tools.NextStep;
    cmd.Connection.Open();
    cmd.ExecuteNonQuery();
  } finally {
    cmd.Connection.Close();
    cmd.Parameters.Clear();
    cmd.Dispose();
  }
  endCall = true;
}
Run Code Online (Sandbox Code Playgroud)

出现InvalidOperationException

c# t-sql visual-studio-2010

5
推荐指数
2
解决办法
2万
查看次数

C#MySQL连接池

我正在C# multi threading申请并使用MySQL单一连接到整个应用程序.但是当两个或多个线程同时尝试访问数据库时,我得到以下错误:

已经有一个DataReader与此相关的开放Connection,必须先关闭.

我的连接代码如下

public static _connectionSetup = new MySqlConnection("Server=server ; Database=database;User ID=user;Password=pass;Pooling=true;");
Run Code Online (Sandbox Code Playgroud)

当我需要使用连接我使用下面的代码: -

using (MySqlConnection connection =_connectionSetup )
{
    using (MySqlCommand command = new MySqlCommand("proc", connection))
    {
        ....
    }
}
Run Code Online (Sandbox Code Playgroud)

我尝试过使用pooling=true,我已经为两个不同的线程创建了两个独立的连接,但我仍然遇到上述错误.
我错过了什么吗?

如何实现连接池以便所有线程都使用单独的连接并且不会导致任何问题?

.net c# mysql multithreading

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