Tag: ado.net

使用SqlConnection.GetSchema仅获取表(无视图)

我用的时候 SqlConnection.GetSchema(“Tables”); 它返回目标数据库的所有表和视图。 有没有办法只返回表? 我所做的所有研究表明我正确地做了这一点,但它总是返回视图,就像它们是表格一样。 我已经在调试中挖掘了DataTable,我甚至找不到区别。 报告的数据类型相同……据我所知,它无法区分视图和表。 (它在某种程度上是有意义的,因为所有意图和目的的视图都是一个表。) 我正在使用Northwind数据库进行测试。 我正在用C#编写应用程序。 这是我运行以获取架构信息的代码。 很简单。 SQLCon.Open(); DataTable tables = SQLCon.GetSchema(“Tables”); SQLCon.Close(); 我非常想使用getschema方法而不必以另一种方式查询数据库……如果可能的话。

DataTable列重新排序

我正在使用带有内容的DataTable column1 column2 column3 column4 column5 column6 column7 column8 column9 column10 row1 abcdefghij 我希望将表重新排序为 column4 column2 column1 column7 column6 column9 column10 column5 column8 column3 row1 dbagfijehc 我尝试使用DataTable.Column[i].SetOrdinal()方法,但它只是正确地交换了第一列。

返回的数据类型因表中的数据而异

我有一个包含两列的表 – [security_role_name]和security_role_cd。 security_role_cd的数据类型在Security_Role表中为smallint。 我有以下数据选择逻辑。 返回的数据类型因数据情况而异: – 表中没有数据 表中有一条记录 问题 为什么这些方案中的数据类型会有所不同 如何纠正它 注意 :目前我正在使用try..catch来满足这种情况 码 private int GetNextRoleID(SqlConnection connection) { int? newRoleID = null; //string commandText = “SELECT (MAX(security_role_cd)) AS [NewRoleID] FROM Security_Role “; string commandText = “SELECT TOP 1 security_role_cd AS [NewRoleID] FROM Security_Role ORDER BY security_role_cd DESC”; SqlCommand command = new SqlCommand(commandText, connection); […]

Int32.TryParse()或(int?)command.ExecuteScalar()

我有一个SQL查询,它只返回一个字段 – 一个INT类型的ID。 我必须在C#代码中将其用作整数。 哪种方式更快,占用内存更少? int id; if(Int32.TryParse(command.ExecuteScalar().ToString(), out id)) { // use id } 要么 int? id = (int?)command.ExecuteScalar(); if(id.HasValue) { // use id.Value } 要么 int? id = command.ExecuteScalar() as int?; if(id.HasValue) { // use id.Value }

ADO.net SqlTransaction提高了性能

我正在做一些涉及将一批记录插入Sql数据库的工作。 批量的大小会有所不同,但为了论证,我们可以说每5秒有5000条记录。 但可能会少一些。 多个进程将写入此表,没有任何内容正在从中读取。 我在快速测试中注意到的是,围绕整个批量插入使用SqlTransaction似乎可以提高性能。 例如 SqlTransaction trans = Connection.BeginTransaction() myStoredProc.Transaction = trans; sampleData.ForEach(ExecuteNonQueryAgainstDB); transaction.Commit(); 我对能够回滚我的更改不感兴趣所以我不会真正考虑使用事务,除非它似乎提高了性能。 如果我删除此事务代码,我的插入从300ms到大约800ms! 这是什么逻辑? 因为我的理解是事务仍然将数据写入数据库但锁定记录直到它被提交。 我原以为这会有一个开销…… 我正在寻找的是这种插入的最快方法。

Visual Studio更新模型来自数据库问题

i was facing a issue while trying to add a new Store Procedure from database . update model from data base is showing extra line changes in all Store Procedure and showing in “Include Changes ” in Visual studio . I am using Visual Studio 2015 , trying to add newly created store Procedure in […]

如何在给定DbCommand或DbConnection的情况下创建DbDataAdapter?

我想创建一个适用于任何数据提供者的数据访问层。 我知道可以使用连接上可用的工厂方法创建DbCommand 。 objDbCon.CreateCommand(); 但是,我找不到任何创建DbDataAdapter东西。 这是ADO.NET中的错误还是什么?

我可以在.Net中加载到内存中的DataTable的最大大小是多少?

我可以在.Net中加载到内存中的DataTable的最大大小是多少? 是否存在人为限制,或者仅受我运行代码的框的限制?

将围绕DataReader放置一个“using”语句关闭吗?

我经常写这样的DataReader代码: try { dr = cmd.ExecuteReader(CommandBehavior.SingleResult); while (dr.Read()) { // Do stuff } } finally { if (dr != null) { dr.Close(); } } 替换try是否安全, finally只using DataReader创建的using块? 我想知道的原因是因为在所有Microsoft示例中我都看到他们使用了一个用于连接的但总是在DataReader上显式调用Close() 。 Heres是使用DataReader检索数据的一个例子(ADO.NET) : static void HasRows(SqlConnection connection) { using (connection) { SqlCommand command = new SqlCommand( “SELECT CategoryID, CategoryName FROM Categories;”, connection); connection.Open(); SqlDataReader reader = command.ExecuteReader(); […]

Base64字符串抛出无效字符错误

即使我不应该,我仍然会收到Base64无效字符错误。 该程序采用XML文件并将其导出到文档。 如果用户想要,它也会压缩文件。 压缩工作正常并返回一个Base64字符串,该字符串被编码为UTF-8并写入文件。 当它将文档重新加载到程序中时,我必须检查它是否被压缩,代码只是: byte[] gzBuffer = System.Convert.FromBase64String(text); return “1F-8B-08” == BitConverter.ToString(new List(gzBuffer).GetRange(4, 3).ToArray()); 它检查字符串的开头以查看其中是否包含GZips代码。 现在问题是,我的所有测试都有效。 我拿一根绳子,压缩它,解压缩,并将它与原始的相比较。 问题是当我从ADO Recordset返回字符串时。 字符串正是写入文件的内容(最后添加了一个“\ 0”,但我认为即使做了任何事情,甚至修剪它仍然会抛出)。 我甚至将整个字符串复制并粘贴到测试方法中并压缩/解压缩。 工作良好。 测试将通过,但代码将使用完全相同的字符串失败? 唯一的区别是,不是仅仅声明一个常规字符串并传递它,而是从记录集中返回一个。 关于我做错什么的任何想法?