Tag: sql server

数据库未启动但SQL Server已准备好进行连接时出现SqlException

我正在处理SQL Server的“准备连接”状态和我的数据库启动时间之间的相当长的延迟。 有时需要2分钟以上。 这就是为什么我有时会在联机之前尝试连接数据库的原因。 您知道吗,如何缩短“准备连接”和启动数据库之间的时间? 或者我如何确定数据库是否在线以从我的C#应用​​程序连接到它? 基本上我通过连接字符串有一些连接的“缓存”。 第一次连接当然会发生这种情况,因此我的连接代码非常简单: var result = new SqlConnection(); result.ConnectionString = “some connection string here”; try { result.Open() } catch (Exception ex) { //some logging stuff here throw; } 这是C#exception: System.Data.SqlClient.SqlException:无法打开登录请求的数据库“XXX”。 登录失败。 这是SQL Server日志: 2014-03-31 08:21:05.65 – SQL Server现在已准备好进行客户端连接。 这是一条情报信息; 无需用户操作。 2014-03-31 08:21:09.21 – 数据库模型(数据库ID 3)在1秒内完成恢复(分析234毫秒,重做0毫秒,撤消514毫秒)。这只是一条信息性消息。 无需用户操作。 2014-03-31 08:21:11.52 – 错误:18456,严重性:14,状态:38。 […]

使用Collat​​ionInfo.Comparer在c#和SQL之间实现一致的排序

我试图使用SMO的Collat​​ionInfo.Comparer来获取我的c#代码,以便像SQL Server一样排序。 我得到了正确的整理,但我的项目仍然没有正确排序。 var collationInfo = CollationInfo.Collations.Single(x => x.Name == “SQL_Latin1_General_CP1_CS_AS”) as CollationInfo; var comparer = collationInfo.Comparer; int c = comparer.Compare(“Tri-Valley L”, “Trimble L”); 在这种情况下,c返回’1’,表示Tri-Valley L将在Trimble之后。 但是这个代码在SQL Server中 DECLARE @T TABLE ( Name VARCHAR(20) ) INSERT INTO @T ( Name ) VALUES(‘Tri-Valley L’), (‘Trimble L’) SELECT Name FROM @T ORDER BY Name 在Trimble之前返回Tri-Valley。 整理比较的东西是不正常工作,还是我做错了什么?

为什么Dapper无法返回多个插入的行ID?

我有一个SQL Server表,其中插入行使用: var sql = @” DECLARE @InsertedRows AS TABLE (Id BIGINT); INSERT INTO Person ([Name], [Age]) OUTPUT Inserted.Id INTO @InsertedRows VALUES (@Name, @Age); SELECT Id FROM @InsertedRows;”; Person person = …; var id = connection.Query(sql, person).First(); 这一切都很好,但是如果我尝试插入多个项目并使用以下命令返回所有插入的ID: IEnumerable people = …; var ids = connection.Query(sql, people); 我收到一个错误: System.InvalidOperationException:在此上下文中不允许使用可枚举的参数序列(数组,列表等) 在Dapper.SqlMapper.GetCacheInfo(身份标识,对象exampleParameters,布尔addToCache) 在Dapper.SqlMapper.d__23`1.MoveNext() —从抛出exception的先前位置开始的堆栈跟踪结束— 如何在Dapper中返回多个插入的ID?

SQL Server序列差距

我有一个SEQUENCE ,用于设置表的事务对开: CREATE SEQUENCE [Seq].[Folio] AS [bigint] START WITH 114090 INCREMENT BY 1 MINVALUE -9223372036854775808 MAXVALUE 9223372036854775807 CACHE 今天只是为了好奇我做了一个: SELECT folio FROM transactions ORDER BY folio DESC 如果有差距会有什么意外,因此表中缺少对开页。 例: 898,897,894,892,890,889 …… 这意味着事情正在发生。 为了提供更多信息,我使用的INSERT存储过程在INSERT INTO…之前有以下内容INSERT INTO… DECLARE @numfolio int SELECT @numfolio = NEXT VALUE FOR Seq.Folio 从我的应用程序保存信息时,我使用了数据库事务,所以如果一切顺利,那么应用程序执行COMMIT TRANSACTION ,如果不是,我执行ROLLBACK TRANSACTION 。 我认为问题的根源是事务,所以当出现错误时,序列的NEXT VALUE已经生成, ROLLBACK对此没有影响。 有任何线索如何解决这个问题,以便有一个没有间隙的完美序列?

从生成的表中检索数据时,对象名称“dbo.TableName”无效

我首先使用实体​​框架代码来创建我的表。 请注意 – 创建表而不是数据库,因为我正在处理托管环境,并且我没有允许创建数据库的用户。 提交数据库更新工作正常,但检索数据会产生exception: exception详细信息:System.Data.SqlClient.SqlException:无效的对象名称’dbo.EventHosts’。 我读过它发生了,因为我没有使用EF Code First来创建数据库。 那很好,但我如何优雅地解决这个问题呢? 所有生成的表都没有像dbo这样的前缀。 像这样的解决方案不起作用,并且根本不优雅: [Table(“EventHosts”, Schema = “”)]

SSIS – 进程无法访问该文件,因为它正由另一个进程使用

我有以下Dataflow: 控制: 我只想将源文件夹中flatfiles的所有数据复制到sql数据库,并在复制后将这些文件移动到名为Done的文件夹中。 但是当我运行这个时,我得到错误: [File System Task] Error: An error occurred with the following error message: “The process cannot access the file because it is being used by another process.”. 数据被复制到sqlserver,但文件不会移动。 我的进程选项卡如下:

在asp.net中使用SQL Server存储过程输出c#

我是新手使用存储过程。 我们有一个现有系统,它使用检查用户名和URL路径的存储过程。 存储过程将检查用户详细信息是否存在。 如果存在,则返回1,否则返回0。 我试图通过提供用户详细信息和路径来编写asp.net代码来调用此存储过程,然后使用asp.net中返回的0或1值。

DataReader游标倒带

如何将DataReader的光标倒回到开头? 使用一个DataReader结果我需要运行两个while循环,但那些必须从头开始。 它们是一个运行查询一次的结果集中的两次迭代。 例: dr = command.ExecuteReader(cmd); while (dr.Read()) { // do some… } // rewind cursor here while (dr.Read()) { // do another things… } 我查看了DataReader文档并且我什么也没找到,所以如果使用DataReader无法实现,我可以更改适合此目的的类。

无法使用连接字符串连接到本地SQL Server DB,但VS可以

我正在尝试使用连接字符串通过Visual Studio 15连接到本地Sql Server 2012数据库实例。 虽然我已经能够通过Visual Studio SQL Server对象资源管理器连接到数据库并成功运行测试程序,但我无法在使用连接字符串的项目中执行此操作。 这是我的连接字符串,由SQL Server对象资源管理器提供 这是我的代码完美地连接到Azure数据库与Azure给定的连接字符串(代码工作) public class DbConn { public static string DatabaseConnectionString = System.Configuration.ConfigurationManager.ConnectionStrings[“objConnLocal”].ConnectionString; public static SqlConnection objConn = new sqlConnection(DatabaseConnectionString); public void spCMSSelectTest(out DataSet ds) { ds = new DataSet(“buttons”); SqlDataAdapter objDataAdapter = new SqlDataAdapter(); SqlCommand cmd = new SqlCommand(“spCMSSelectTest”, DbConn.objConn); cmd.CommandType = CommandType.StoredProcedure; cmd.Connection.Open(); objDataAdapter.SelectCommand […]

使用SqlBulkCopy为每个插入的行触发触发器

我正在使用SqlBulkCopy类在表tbl_records一次插入50k行我在此表上设置了After Insert触发器并使用以下代码 SqlBulkCopy SqlBc1 = new SqlBulkCopy(strConnString, SqlBulkCopyOptions.FireTriggers); // Set DataReader For SqlBulkCopy sqlComm = new SqlCommand(strQuery, sqlTemCon); sqlComm.CommandTimeout = 3600000; sqlComm.CommandType = System.Data.CommandType.Text; SqlDataReader dReader = sqlComm.ExecuteReader(); SqlBc1.WriteToServer(dReader); 但执行前后。 它仅触发50k插入的First行触发器 我想它应该为每一行开火。 我怎样才能做到这一点??