我目前收到此错误:
System.Data.SqlClient.SqlException:不允许新事务,因为会话中还有其他线程在运行.
在运行此代码时:
public class ProductManager : IProductManager
{
#region Declare Models
private RivWorks.Model.Negotiation.RIV_Entities _dbRiv = RivWorks.Model.Stores.RivEntities(AppSettings.RivWorkEntities_connString);
private RivWorks.Model.NegotiationAutos.RivFeedsEntities _dbFeed = RivWorks.Model.Stores.FeedEntities(AppSettings.FeedAutosEntities_connString);
#endregion
public IProduct GetProductById(Guid productId)
{
// Do a quick sync of the feeds...
SyncFeeds();
...
// get a product...
...
return product;
}
private void SyncFeeds()
{
bool found = false;
string feedSource = "AUTO";
switch (feedSource) // companyFeedDetail.FeedSourceTable.ToUpper())
{
case "AUTO":
var clientList = from a in _dbFeed.Client.Include("Auto") select a;
foreach (RivWorks.Model.NegotiationAutos.Client client in clientList)
{ …
Run Code Online (Sandbox Code Playgroud) 最近几天我们在网站上看到这条错误消息:
"超时已到期.在从池中获取连接之前已经过了超时时间.这可能是因为所有池连接都在使用中并且达到了最大池大小."
我们的代码暂时没有改变任何内容.我修改了代码以检查未关闭的打开连接,但发现一切都很好.
我怎么解决这个问题?
我需要编辑此池吗?
如何编辑此池的最大连接数?
高流量网站的推荐值是多少?
我需要在IIS中编辑某些内容吗?
我发现活动连接的数量在15到31之间,我发现在SQL Server中配置的最大允许连接数超过3200个连接,31个太多,或者我应该在ASP.NET配置中编辑一些东西?
有谁知道MARS(多个活动结果集)的任何缺点?有没有人知道为什么人们应该避免使用MARS,比如游标比MARS更有用的情况.
我有这个遗留代码:
private void conecta()
{
if (conexao.State == ConnectionState.Closed)
conexao.Open();
}
public List<string[]> get_dados_historico_verificacao_email_WEB(string email)
{
List<string[]> historicos = new List<string[]>();
conecta();
sql =
@"SELECT *
FROM historico_verificacao_email
WHERE nm_email = '" + email + @"'
ORDER BY dt_verificacao_email DESC, hr_verificacao_email DESC";
com = new SqlCommand(sql, conexao);
SqlDataReader dr = com.ExecuteReader();
if (dr.HasRows)
{
while (dr.Read())
{
string[] dados_historico = new string[6];
dados_historico[0] = dr["nm_email"].ToString();
dados_historico[1] = dr["dt_verificacao_email"].ToString();
dados_historico[1] = dados_historico[1].Substring(0, 10);
dados_historico[2] = dr["hr_verificacao_email"].ToString();
dados_historico[3] = dr["ds_tipo_verificacao"].ToString();
sql = …
Run Code Online (Sandbox Code Playgroud) 如何在ExecuteQueryDynamic上的LinqPad上设置查询超时?
Util.CurrentDataContext.ExecuteQueryDynamic($"SELECT count(*) FROM MyDb.dbo.{viewName}");
Run Code Online (Sandbox Code Playgroud)
我想使用此超时来检测太慢的视图。对于每个视图,我都要求一个计数,但是当计数花费太多时间时,我就停止它并计数下一个。
这是我完整的LINQPad代码
void Main()
{
// In case of error "There is already an open DataReader associated with this Command which must be closed first."
// /sf/ask/424353471/
// Add MultipleActiveResultSets=true to connection string.
var biewsCount = b.V_sysobjects.Where(v => v.Type == "V").Count();
var bViewsDetail = Util.OnDemand<List<SysObject>>("Get Views Detail", () => GetViewsDetail("b", b.V_sysobjects.Where(v => v.Type == "V").Select(v => v.Name).ToList()));
bViewsDetail.Dump();
}
public List<SysObject> GetViewsDetail(string database, List<string> objectNames)
{
var result = new List<SysObject>();
foreach (var name in …
Run Code Online (Sandbox Code Playgroud) 我对TransactionScope和异步/同步SQL调用有一种奇怪的情况,我很难理解。我希望对这些操作的来龙去脉有较深了解的人能对此问题有所启发。
情况: 我有一个NUnit测试夹具,该夹具在[SetUp]期间创建一个TransactionScope,并将其放在[TearDown]处,以使每个测试都在相同的数据上运行。我进行了一系列测试,这些测试开始了对数据库的异步操作,然后对数据库执行了同步操作。第一个这样的测试成功完成。第二次这样的测试失败,并显示“已经有与此命令关联的打开的DataReader,必须先关闭它”。
在我看来,一旦调用TransactionScope.Dispose / Complete,则自动SQLConnection池将失去对哪些连接已打开DataReaders的跟踪。它将相同的SqlConnection分发给两个同时运行的操作,第二个消亡。
我的主要问题是“是什么导致了此行为(特别是)?”
我的第二个问题是“可以采取什么措施安全地解决此问题?”
下面的复制代码将打印出客户端连接ID。在我的机器上,第二个测试用例中用于ASYNC和SYNC调用的ClientConnectionId始终相同。
复制代码:
[TestFixture]
public class DataReaderTests
{
private TransactionScope _scope;
private string _connString = @"my connection string";
[SetUp]
public void Setup()
{
var options = new TransactionOptions()
{
IsolationLevel = IsolationLevel.ReadCommitted,
Timeout = TimeSpan.FromMinutes(1)
};
_scope = new TransactionScope(TransactionScopeOption.RequiresNew, options, TransactionScopeAsyncFlowOption.Enabled);
}
[Test]
[TestCase("First")]
[TestCase("Second")]
public void Test(string name)
{
DoAsyncThing().ConfigureAwait(false);
using (var conn = new SqlConnection(_connString))
{
try
{
conn.Open(); …
Run Code Online (Sandbox Code Playgroud) 以下代码中的错误在哪里?已经有一个与此命令关联的打开的DataReader,必须先关闭它.
"执行命令定义时发生错误.有关详细信息,请参阅内部异常."
var cat = from c in db.Question select c;
foreach (Questions question in cat) {
Console.WriteLine("{0}", question.tittle);
Console.WriteLine("{0}", question.deskripsi);
Console.WriteLine("{0}", question.id_question);
**foreach (Categories p in question.Categories)**
{
Console.WriteLine("{0}", p.id_kategori);
Console.WriteLine("{0}", p.nama_kategori);
}
}
Run Code Online (Sandbox Code Playgroud) 我正在开发需要连接到另一个数据库以获取一些数据的应用程序,为此,我决定使用 SqlConnection、阅读器等。
而且我需要执行一些查询,例如首先我需要为某个用户获取 CARD ID,然后我需要通过该 CARD ID 获取一些数据..
这是我的代码:
#region Connection to another Database
SqlConnection sqlConnection1 = new SqlConnection("Data Source=ComputerOne; Initial Catalog=TestDatabase;Integrated Security=False; User ID=test; Password=test123;");
SqlCommand cmd = new SqlCommand();
SqlDataReader reader;
cmd.CommandText = "Select * From Users Where CardID=" + "'" + user.CardID + "'";
cmd.CommandType = CommandType.Text;
cmd.Connection = sqlConnection1;
sqlConnection1.Open();
reader = cmd.ExecuteReader();
string cardID = "";
string quantity="";
while (reader.Read())
{
cardID = reader["CardID"].ToString();
}
//HOW COULD I WRITE ANOTHER QUERY NOW, FOR EXAMPLE, OK …
Run Code Online (Sandbox Code Playgroud) c# ×6
sql ×2
sql-server ×2
transactions ×2
.net ×1
asp.net ×1
connection ×1
database ×1
datareader ×1
linq ×1
linqpad ×1
reader ×1