Tag: sql server

SqlDataAdapter如何在内部工作?

我想知道SqlDataAdapter是如何在内部工作的,特别是在使用UpdateCommand来更新巨大的DataTable (因为它通常比从循环中发送sql语句快得多)。 这是我想到的一些想法: 它创建了一个准备好的sql语句(使用SqlCommand.Prepare() ),并填充了CommandText并使用正确的sql类型初始化了sql参数。 然后,它在需要更新的数据行上循环,并为每条记录更新参数值,并调用SqlCommand.ExecuteNonQuery() 。 它创建了一堆SqlCommand对象,里面填充了所有内容( CommandText和sql参数)。 然后将多个SqlCommands一次性批处理到服务器(取决于UpdateBatchSize )。 它使用一些特殊的,低级或无证的sql驱动程序指令,允许以有效的方式对多行执行更新(需要使用特殊数据格式和相同的sql查询(此处为UpdateCommand )提供要更新的行针对这些行中的每一行执行)。

SSMS SMO对象:获取查询结果

我遇到了本教程,了解如何使用GO语句执行SQL脚本。 现在我想知道我能得到消息TAB的输出。 使用几个GO语句,输出将如下所示: 1行受影响 受影响的912行 … 但是server.ConnectionContext.ExecuteNonQuery()只能返回一个int,而我需要所有的文本。 如果查询的某些部分存在某些错误,则应将其也放在输出中。 任何帮助,将不胜感激。

使用Entity Framework Core调用标量函数的最佳实践(2.1)

我经常需要从我的Web应用程序(ASP.NET Core / EF Core)调用SQL Server上定义的标量函数。 由于这些函数只是简单的辅助函数,我也使用了很多函数,因此我使用一般模式来调用这些标量函数 – 借助EF Core 2.1提供的新查询类型。 由于我对EF Core相对较新,我的问题是这种模式是否会导致问题和/或是否有更好的解决方案或最佳实践来调用标量函数。 解决方案有效,到目前为止我无法观察到任何问题但是例如我想知道对于不同的函数使用相同的查询类型是否会导致意外的值或由于EF Core中的缓存/跟踪行为等引起的奇怪行为 – 它更像是一个直觉。 所以这是模式:我不是为每个标量函数定义不同的实体类型,而是简单地定义一个generics类型: public class PrimitiveDto { public T Value { get; set; } } 在我的上下文类中,我为我希望使用的标量函数的每个返回类型注册这些类型 – 因此对于返回’int’的所有标量函数,上下文类将有一个额外的条目,如下所示: public virtual DbQuery<PrimitiveDto> BasicIntDto { get; set; } 在应用程序的每个部分,我想调用一个返回’int’的标量函数,我只使用相同的以下模式: context.BasicIntDto.FromSql(“SELECT AS Value”) 通过使用这种模式,我可以以相同的方式调用任意数量的函数,而无需定义其他类型或扩展上下文类。 如果我能通过这种模式遇到陷阱,请告诉我。 非常感谢你。

“Streaming”从SQL Server中的表中读取超过1000万行

以流方式(如SQL Server Management Studio)从表(在SQL Server 2012,BI实例中)读取数百万条记录的最佳策略是什么? 我需要在本地缓存这些记录(C#控制台应用程序)以进行进一步处理。 更新 – 与SqlDataReader一起使用的示例代码 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Data; using System.Data.SqlClient; using System.Threading; namespace ReadMillionsOfRows { class Program { static ManualResetEvent done = new ManualResetEvent(false); static void Main(string[] args) { Process(); done.WaitOne(); } public static async Task Process() { string connString = […]

Linq查询使用包含而不包含

我试图从数据库中获取记录,因为它应该获取记录,其中name包含“searchKey”,而名称不在excludeTerms数组中,并且逗号分隔。 我怎么能在Linq做到这一点? Rows = (from u in DB.Clients where u.Name.Contains(searchTerm) && !u.Name.Contains(string.Join(“,”, excludeTerms.Select(s => “‘” + s + “‘”).ToArray())) select new ClientModel { Name = u.FullName, Id = u.Id, }).Take(5).ToList(); 其中excludeterma包含假设的元素列表 1)Sandy 2)Mandy 3)Larry etc List excludeTerms = new List();

以编程方式分离数据库

我有一个数据库“D:\ MDF CONNECTION SAMPLE \ BIN \ DEBUG \ HARMDATABASE.MDF”。 我试图使用以下代码分离或重命名它: SqlConnection conn = new SqlConnection(“Data Source=.\\MSSQLSERVER2008;database=Master;Integrated Security=True;”); SqlCommand cmd = new SqlCommand(“”, conn); cmd.CommandText = @”sys.sp_detach_db D:\MDF CONNECTION SAMPLE\BIN\DEBUG\HARMDATABASE.MDF”; conn.Open(); cmd.ExecuteNonQuery(); cmd.Dispose(); conn.Dispose(); 但是得到一个错误: ‘\’附近的语法不正确。

调用存储过程时处理SQL注入的最佳实践

我inheritance了我正在修复安全漏洞的代码。 调用存储过程时,处理SQL注入的最佳实践是什么? 代码类似于: StringBuilder sql = new StringBuilder(“”); sql.Append(string.Format(“Sp_MyStoredProc ‘{0}’, {1}, {2}”, sessionid, myVar, “0”)); using (SqlConnection cn = new SqlConnection(ConfigurationManager.ConnectionStrings[“Main”].ToString())) { cn.Open(); using (SqlCommand command = new SqlCommand(sql.ToString(), cn)) { command.CommandType = CommandType.Text; command.CommandTimeout = 10000; returnCode = (string)command.ExecuteScalar(); } } 我只是用常规SQL查询做同样的事情并使用AddParameter正确添加参数?

System.Data.Entity.Infrastructure.CommitFailedException:C#Multithreading&SQL Server 2012

我们有一个C#multithreading(100线程)程序,它从数据库中读取记录,每个线程获取一条记录(每个线程一个entity framework连接)并更新单个数据库表。 在最初的几分钟(5分钟)内,程序运行正常,然后突然所有线程都开始抛出以下错误消息。大约1分钟后一切都会恢复正常阶段..我认为SQL Server也是如此单个数据库表的许多锁(可能试图获取该表上的表锁)或与单个数据库的连接太多并关闭所有连接。 我无法调试此问题,有人可以帮助我获取以下信息, SQL Server 2012在哪里存储其日志? 我们是否可以增加日志级别以查看在保存数据库实体时它抛出exception的原因 如何获取每个表的锁数,DB获取的不同类型的锁(表锁,页锁,num行锁等) 任何其他指针来调试此问题。 仅供参考,我从sqdror日志中找不到任何有用的东西(SELECT SERVERPROPERTY(’ErrorLogFileName’)) 这是exception的堆栈跟踪 System.Data.Entity.Infrastructure.CommitFailedException:提交数据库事务时报告了错误,但无法确定数据库服务器上的事务是成功还是失败。 有关详细信息,请参阅内部exception和http://go.microsoft.com/fwlink/?LinkId=313468 。 System.Data.SqlClient.SqlException:超时已过期。 操作完成之前经过的超时时间或服务器没有响应。 System.ComponentModel.Win32Exception:等待操作超时 在System.Data.SqlClient.SqlInternalConnection.OnError(SqlExceptionexception,Boolean breakConnection,Action 1 wrapCloseInAction) at System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj, Boolean callerHasConnectionLock, Boolean asyncClose) at System.Data.SqlClient.TdsParserStateObject.ReadSniError(TdsParserStateObject stateObj, UInt32 error) at System.Data.SqlClient.TdsParserStateObject.ReadSniSyncOverAsync() at System.Data.SqlClient.TdsParserStateObject.TryReadNetworkPacket() at System.Data.SqlClient.TdsParserStateObject.TryPrepareBuffer() at System.Data.SqlClient.TdsParserStateObject.TryReadByte(Byte& value) at System.Data.SqlClient.TdsParser.TryRun(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject […]

使用smo在SqlServer中创建用户的问题

1)如果已经有登录’user1’,那么我通过调用CreateDatabaseUser函数为数据库’db1’创建用户’user1′ 2)否则,我使用CreateServerLogin创建一个密码为“password1”的登录名“user1”,默认数据库为“db1”(仅在创建db1之后),然后使用CreateDatabaseUser为“db1”创建用户“user1” 方法(2)在newUser.Create();抛出exceptionnewUser.Create(); 在CreateDatabaseUser 说, Microsoft.SqlServer.Management.Smo.FailedOperationException: Create failed for User ‘user1’. —> Microsoft.SqlServer.Management.Common.ExecutionFailureException: An exception occurred while executing a Transact-SQL statement or batch. — > System.Data.SqlClient.SqlException: ‘[user1]’ is not a valid login or you do not have permission. Microsoft.SqlServer.Management.Smo.FailedOperationException: Create failed for User ‘user1’. —> Microsoft.SqlServer.Management.Common.ExecutionFailureException: An exception occurred while executing a Transact-SQL statement or […]

在Entity Framework Core中创建非聚集索引

使用Entity Framework Core,我希望拥有一个Guid PK,而不会在数据库中出现页面碎片 。 我看过这个post和这个 。 虽然在EF6中可行,但它的完成方式似乎已经发生了变化。 是否可以在Entity Framework Core中创建非群集主键并具有其他索引? 问答答以下。