Tag: SQL服务器

使用SqlDataReader作为资源的习惯用法

继这个问题之后,我发现自己一遍又一遍地编写以下代码: SqlCommand command = new SqlCommand(); // Code to initialize command with what we want to do using (SqlConnection connection = openConnection()) { command.Connection = connection; using (SqlDataReader dataReader = thisCommand.ExecuteReader()) { while (dataReader.Read()) { // Do stuff with results } } } 必须嵌套两个using语句是相当繁琐的。 有没有办法告诉 SqlDataReader它拥有该命令,并告诉命令它拥有该连接? 如果有办法做到这一点,那么我可以写一个辅助方法,可以像这样调用: // buildAndExecuteCommand opens the connection, initializes the command […]

在自动启动服务中连接到SQL Server失败,在手动启动时有效。 SQL Server尚未就绪,但服务已启动

TL; DR – MSSQL服务声称准备就绪(状态=已启动),但尚未准备就绪(请参阅下面的删除文本) 我有C#编写的Windows服务,它将自己安装为ServiceAccount.LocalSystem并在ServicesDependedOn指定MSSQLSERVER 。 现在我已经创建了MS SQL用户,授予它所有必要的权限和角色(包括所需数据库上的db_owner和Connect / Login权限)。 当手动运行服务时(通过net start或services.msc管理器),它可以正常工作,即它连接到数据库。 当我重新启动计算机时,该服务会抛出此exception: Cannot open database “xxxx” requested by the login. The login failed. Login failed for user ‘xxxxx’. 我配置错误了什么? 再次,当我手动运行服务时它工作正常! 我也尝试通过MS SQL Management Studio登录此帐户 – 这也有效。 正如评论中所建议的那样,我在尝试连接之前已经尝试过等待 – 20秒睡眠无法解决问题。 我将MSSQLSERVER服务的状态(通过ServiceController检查)添加到日志中,它是“正在运行”。 一切似乎都很好,除了在自动启动服务时登录失败 好的,我已经跟踪了几个小时了。 这是我发现的: SQL Server服务(MSSQLSERVER) 声称已经准备就绪 (status = Started)(发出“net start”命令后大约2-3秒)。 不幸的是,预热(启动数据库,恢复和其他一些东西)会在以后 发生,最多需要2分钟 (120秒!!)。 当然,它会在热身之前拒绝连接。 […]

通过SqlConnection / SqlCeConnection连接到.sdf数据库的问题

我在连接到.sdf(sql compact edition)数据库时遇到了极大的麻烦。 我最初可以连接以提取行以validation用户名/密码,但是当我尝试通过SqlCeConnection / SqlCeCommand命令或通过尝试添加项SqlClient / SqlCommand连接向数据库添加项时,我没有运气。 我明白了: A network-related or instance-specific error occurred while establishing a connection to SQL Server. The server was not found or was not accessible. Verify that the instance name is correct and that SQL Server is configured to allow remote connections. (provider: SQL Network Interfaces, error: 26 – […]

C#’select count’sql命令错误地从sql server返回零行

我正在尝试从SQL Server表返回rowcount。 ‘net上的多个来源显示下面是一个可行的方法,但它继续返回’0行’。 当我在管理工作室中使用该查询时,它工作正常并正确返回rowcount。 我只是用简单的表名以及管理工作室倾向于喜欢的完全合格的名称来尝试它。 using (SqlConnection cn = new SqlConnection()) { cn.ConnectionString = sqlConnectionString; cn.Open(); SqlCommand commandRowCount = new SqlCommand(“SELECT COUNT(*) FROM [LBSExplorer].[dbo].[myTable]”, cn); countStart = System.Convert.ToInt32(commandRowCount.ExecuteScalar()); Console.WriteLine(“Starting row count: ” + countStart.ToString()); } 有什么可能导致它的建议吗?

将entity framework与多个MS SQLSERVER数据库一起使用

我来回搜索,但似乎无法掌握我需要的东西。 如果最近得到回答,我很抱歉。 重新定向讨论对我有好处。 这就是场景。 我被指示从我的老板转移到Microsoft Visual Foxpro(MS正在撤回2015年的支持)到.Net C#。 为了良好的基础和最佳实践的采用,我决定先学习,将相关信息拼凑起来,然后开始编码。 这是第二年。 我们是一家上市公司,为50多个客户提供工资处理外包服务。 每个客户端目前都有自己的数据库。 数据库具有完全相同结构的表。 我是新手。 完全是.net世界的新东西。 我从使用数据表,数据加载器的原始SQL开始,但在我的研究中,我得到了一些讨论令人沮丧。 许多人认为entity framework应该达到目的。 但是,允许混合方法,特别是涉及复杂查询时。 有人能指出我的一些“好读”,我可以用50多个缩进数据库实现Entity Framework。 每个数据库都是完全独立的,没有任何其他数据库。 当用户登录时,他们选择处理工资单所需的客户端,然后EF指向该数据库。

如何从SqlDataReader读取SQL Server COUNT

我正在尝试使用C# SqlDataReader查找表的计数,但我一直在寻找 没有数据时无效的读取尝试 我的代码: string sql = “SELECT COUNT(*) FROM [DB].[dbo].[myTable]”; SqlCommand cmd = new SqlComman(sql, connectionString); SqlDataReader mySqlDataReader = cmd.ExecuteReader(); int count = mySqlDataReader.GetInt32(0); // Here is where I get the error. 我知道我有一个与数据库的有效连接,因为我可以在许多地方读取和写入, COUNT(*)的特殊之处是我无法正确读取它? 如何填充int count ?

活动Azure Sql连接超出了连接池限制

我们的Azure SQL数据库性能会在很长一段时间内显着降低,我们会在生产中解决问题。 我们知道我们在其中一个表上有锁,但是这些锁不是死锁,它们是长锁,并且在一个小时左右的时间内性能恢复正常。 我们正试图找到关于如何获得这些长锁的所有可能场景(每个查询都超快,所有性能分析器都可以向我们展示导致长锁的原因)。 这个问题的原因如下图所示: Out连接池设置仅允许汇集200个连接。 大多数时候,我们与数据库有大约10-20个开放/池化连接。 然后突然有许多活动连接开始增长,并且池完全被占用。 虽然许多池化连接保持在200以下,但我们看到使用sp_who2的多个活动连接达到1.5k-2k连接(有时为4k-5k)。 我使用Azure门户监控工具构建了相同的图表。 它有不同的聚合期,但显示相同的问题: 我们使用的连接字符串: Data Source = [server] .database.windows.net; initial catalog = [database]; persist security info = True; user id = [user]; password = [password]; MultipleActiveResultSets = True; Connection Timeout = 30; Max Pool大小= 200;池=真;应用= [AppName的] 考虑到200个连接的连接池限制,这怎么可能? ps:没有周期性任务,长时间运行的查询或其他任何工具,我们检查sp_who2与sp_who2所有活动连接。

获取表的列名并将其存储在字符串或var c#asp.net中

我想知道如何获取数据库表的列并将它们存储在字符串或字符串数​​组中。 我有以下代码,但我相信它不起作用。 我正在使用asp.net中给出的默认表。 我已经能够写这个表没问题,但我无法弄清楚如何从中选择并保存检索到的值。 这是我的代码背后的内容 string connection = ConfigurationManager.ConnectionStrings[“ApplicationServices”].ConnectionString; SqlConnection conn = null; conn = new SqlConnection(connection); conn.Open(); using (SqlCommand cmd = new SqlCommand()) { string query = String.Format(“SELECT column_name FROM USER_TAB_COLUMN WHERE table_name = ‘TestTable'”); cmd.Connection = conn; cmd.CommandType = CommandType.Text; cmd.CommandText = query; columns.Text = cmd.ExecuteNonQuery().ToString(); conn.Close(); } 错误是Invalid object name ‘USER_TAB_COLUMN’ 。 […]

SqlParameter和IN语句

我需要以下查询: createList(string commaSeparatedElements) { … SqlCommand query = new SqlCommand(“SELECT * FROM table WHERE id IN (“+commaSeparatedElements+”)”); … } 我想使用参数化查询来编写它,因此检查字符串中的每个元素以防止Sql-Injections。 伪代码: createList(string commaSeparatedElements) { … SqlParameterList elements = new SqlParameterList(“@elements”, SqlDbType.Int); SqlParameterList.Values = commaSeparatedElements.split(new Char[1] {‘,’}); SqlCommand query = new SqlCommand(“SELECT * FROM table WHERE id IN (@elements)”); query.Parameters.Add(elements); … } C#中是否存在类似的内容,或者我必须自己编写? 编辑:谢谢你的所有答案。 当我尽量不使用代码时,我不理解(在过去的日子里有太多糟糕的经历),精致和表值参数,即使它们可能完全满足我的需求,也是禁止的。 我刚做了一个循环。 […]

C#数据类型为SQL Server数据类型

如何将C#数据类型“转换”为SQL Server数据类型(已知SqlDbType ) 即: C# -> “String” SQL Server -> N’String’