Tag: sql

处理大型SQL选择查询/读取块中的SQL数据

我正在使用.Net 4.0和SQL Server 2008 R2。 我正在运行一个大的SQL选择查询,它会返回数百万个结果,并且需要很长时间才能完全运行。 有谁知道如何只读取查询返回的一些结果而不必等待整个查询完成? 换句话说,我想在查询仍然运行并获得下一个结果时读取第一个10,000个记录块。

entity framework包括性能

我一直在关注entity framework的性能,特别是关于使用Includes以及生成和执行各种查询所花费的时间。 我将详细介绍我所做的更改,但如果您认为任何这些假设是错误的,请纠正我。 首先,我们在数据库中有大约10,000个项目(不是很多),并且数据库显着标准化(这导致了大量的导航属性)。 目前的方法是延迟加载所有内容,并且假设请求一个项目可以假脱机数十个db请求,性能非常差,特别是对于较大的数据集。 (这是一个inheritance的项目,第一步是尝试在没有重大重组的情况下提高性能) 因此,我的第一步是获取查询结果,然后仅将导航属性的包含应用于这些结果。 我知道这在技术上执行了2个查询,但是如果我们存储了10,000个项目,但只想返回10个项目,那么仅在这10个项目中包含导航属性更有意义。 其次,在查询结果上使用多个包含且结果集大小非常大的情况下,仍然会遇到性能不佳的问题。 关于什么时候需要加载以及何时将延迟加载到位,我一直很务实。 我的下一个更改是批量加载查询包含,因此执行: query.Include(q => q.MyInclude).Load(); 这再一次显着提高了性能,虽然还有一些db调用(每批包含一个),它比大型查询更快,或者至少减少了entity framework尝试生成大型查询的开销。 所以代码现在看起来像这样: var query = ctx.Filters.Where(x => x.SessionId == id) .Join(ctx.Items, i => i.ItemId, fs => fs.Id, (f, fs) => fs); query .Include(x => x.ItemNav1) .Include(x => x.ItemNav2).Load(); query .Include(x => x.ItemNav3) .Include(x => x.ItemNav4).Load(); query .Include(x => x.ItemNav5) .Include(x […]

entity framework4.1的SQL“不在”语法

对于“not in”SQL等价物,我有一个简单的Entity Framework语法问题。 基本上,我想将以下SQL语法转换为Entity Framework语法: select ID from dbo.List where ID not in (list of IDs) 这是我用于查找单个记录的方法: public static List GetLists(int id) { using (dbInstance db = new dbInstance()) { return db.Lists.Where(m => m.ID == id); } } 这是一个我想用于此的伪方法: public static List GetLists(List listIDs) { using (dbInstance db = new dbInstance()) { return db.Lists.Where(**** What […]

现在有办法将TVP传递给.Net Core上的小巧玲珑吗?

我正在使用.net核心和dapper,第一个没有DataTables,第二个使用它们用于TVP。 我试图将List转换为List ,使用此列表创建一个SqlParameter然后将其转换为DynamicParameter但遗憾的是我得到了: The member of type Microsoft.SqlServer.Server.SqlDataRecord cannot be used as a parameter value UPDATE 在使用IDynamicParameters玩了一下之后,我就开始了。 IEnumerable扩展方法 public static DynamicWrapper toTVP(this IEnumerable enumerable, string tableName, string typeName) { List records = new List(); var properties = typeof(T).GetProperties().Where(p => Mapper.TypeToSQLMap.ContainsKey(p.PropertyType)); var definitions = properties.Select(p => Mapper.TypeToMetaData(p.Name, p.PropertyType)).ToArray(); foreach (var item in enumerable) { var values […]

SQL Server阻止访问组件’Ole Automation Procedures’的过程’sys.sp_OACreate’

SQL Server阻止访问组件“Ole Automation Procedures”的过程sys.sp_OACreate ,因为此组件已作为此服务器的安全配置的一部分关闭。 系统管理员可以使用sp_configure启用“Ole Automation Procedures”。 有关启用“Ole Automation Procedures”的详细信息,请参阅SQL Server联机丛书中的“Surface Area Configuration”。 我试图启用Ole Automation Procedures: sp_configure ‘show advanced options’, 1 GO RECONFIGURE; GO sp_configure ‘Ole Automation Procedures’, 1 GO RECONFIGURE; GO sp_configure ‘show advanced options’, 1 GO RECONFIGURE; 当我执行查询时,我成功获得输出。 但是在尝试通过Windows窗体时,我收到了这个错误。 请帮我

从SqlDataReader读取字符串时内存不足

我遇到了一些我无法弄清楚的最奇怪的事情。 我有一个SQL表,其中包含一堆存储在ntext字段中的报告。 当我将其中一个的值复制并粘贴到记事本中并保存它时(使用Visual Studio从不同行中的较小报告中获取值),原始txt文件大约为5Mb。 当我尝试使用SqlDataReader获取相同的数据并将其转换为字符串时,我得到一个内存不足exception。 以下是我尝试这样做的方法: string output = “”; string cmdtext = “SELECT ReportData FROM Reporting_Compiled WHERE CompiledReportTimeID = @CompiledReportTimeID”; SqlCommand cmd = new SqlCommand(cmdtext, conn); cmd.Parameters.Add(new SqlParameter(“CompiledReportTimeID”, CompiledReportTimeID)); SqlDataReader reader = cmd.ExecuteReader(); while (reader.Read()) { output = reader.GetString(0); // <— exception happens here } reader.Close(); 我尝试创建一个对象和一个stringbuilder来获取数据,但我仍然得到相同的内存不足exception。 我也试过使用reader.GetValue(0).ToString()也无济于事。 查询只返回1行,当我在SQL Management Studio中运行时,它尽可能快乐。 抛出的exception是: System.OutOfMemoryException was […]

使用SqlCommand,如何向其对象添加多个参数,通过sql表中的winform插入

我的winform中有十个文本框,我需要将这些文本框中键入的文本保存到SQL数据库表的10列中。 所以,我应该这样写: INSERT INTO item (c1,c2,c3…,c10) values (@a,@b….@j) cmd.Parameters.Add(“@a”,SqlDbType.Varchar) cmd.Parameteres[“@a”].Value=textbox1.Text; cmd.Parameters.Add(“@b”,SqlDbType.Varchar) cmd.Parameteres[“@b”].Value=textbox2.Text;. . . . . cmd.Parameters.Add(“@j”,SqlDbType.Varchar) cmd.Parameteres[“@j”].Value=textbox10.Text; 或每个文本框的十个单独查询: INSERT INTO item (c1) values (@a) cmd.Parameters.Add(“@a”,SqlDbType.Varchar) cmd.Parameteres[“@a”].Value=textbox1.Text; INSERT INTO item (c2) values (@b) cmd.Parameters.Add(“@b”,SqlDbType.Varchar) cmd.Parameteres[“@b”].Value=textbox2.Text;. . . INSERT INTO item (c10) values (@j) cmd.Parameters.Add(“@j”,SqlDbType.Varchar) cmd.Parameteres[“@j”].Value=textbox10.Text; 或者,请建议一个有效的代码。 如何在单个语句中向cmd添加多个参数? 可能吗?

SQL字符串中的单引号处理

我有一个应用程序,其中文本字段中的值被发送到数据库。 例如,我有一个带有一个字段的表单(文本框)。 当我按下Ok按钮时,文本字段的内容将作为记录插入到表中。 我只是修剪文本框的文本并将其解压缩为变量并将其传递给我的SQL字符串。 问题在于,无论什么类似“It’s”或“Friend’s”这样的单引号都被识别为字符串的结尾。 在Delphi中,我见过像QuotedString这样的QuotedString来避免这种情况。 你的任何想法?

如何在C#Asp.net中将SELECT sql查询结果保存在一个数组中

我已经编写了这个查询以获得一些结果,如果我想将结果保存在数组中我必须做什么? 我想在IF语句中使用col1和col2中的值,这就是我想将它们保存在数组中的原因。 var con = new SqlConnection(“Data Source=local;Initial Catalog=Test;Integrated Security=True”); using (con) using (var command = new SqlCommand(“SELECT col1,col2 FROM some table”, con)) { con.Open(); command.ExecuteNonQuery(); }

C#连接数据库并列出数据库

可能重复: SQL Server查询以查找所有当前数据库名称 我试图弄清楚如何在连接到服务器之后列出数据库而不首先指定数据库。 sqlConnection1 = new SqlConnection(“Server=” + sqlServer + “;Database=” + database + “;User ID=” + userName + “;Password=” + password + “;Trusted_Connection=False;”); 基本上我想要的是最终用户连接到sql server,然后有一个下拉列表,其中填充了他们可以连接和查询的db列表。 想法?