Tag: sqldatareader

在使用SqlDataReader时,如何从普通的旧C#对象中使用BLOB创建流?

这是场景: 我们在MSSQL数据库中的blob中存储文件,例如相对较大的文档(10-300MB)。 我们有一个非常小的域模型,所以我们使用干净的SqlDataReader方法为我们的存储库而不是ORM,以避免不必要的依赖。 我们希望在ASP.NET / ASP.NET MVC网页上使用服务器上下文中的对象。 我们不希望将blob临时存储在byte []中,以避免服务器上的高内存使用量 所以我一直在做的是实现我自己的SqlBlobReader。 它inheritance了Stream和IDisposable,在实例化过程中,我们必须提供一个包含查询的SqlCommand,该查询返回一行包含一列,这当然是我们想要流的blob。 然后我的C#域对象可以具有Stream类型的属性,该属性返回SqlBlobReader实现。 然后,当流式传输到ASP.net MVC等中的FileContentStream时,可以使用此流。 它将立即使用SequentialAccess执行ExecuteReader,以启用来自MSSQL服务器的blob流。 这意味着我们必须小心在使用它时尽快处理流,并且在需要时我们总是懒惰地实例化SqlBlobReader,例如在我们的域对象中使用存储库调用。 我的问题是: 当使用SqlDataReader而不是ORM时,这是在普通旧域对象上实现blob流的聪明方法吗? 我不是ADO.NET专家,实现看起来合理吗? SqlBlobReader.cs: using System; using System.Data; using System.Data.SqlClient; using System.IO; namespace Foo { /// /// There must be a SqlConnection that works inside the SqlCommand. Remember to dispose of the object after usage. /// public class SqlBlobReader […]

SqlDataReader检查空值的最佳方法-sqlDataReader.IsDBNull vs DBNull.Value

我想从数据库中检索十进制值,我想知道检查空值的推荐方法。 我在MSDN上看到过- DBNull.Value字段很少使用此检查。 因此,是reader.IsDBNull是否是检查空值的最佳/最有效方法? 我创建了2个示例方法: public static decimal? GetNullableDecimal(SqlDataReader reader, string fieldName) { if (reader[fieldName] == DBNull.Value) { return null; } return (decimal)reader[fieldName]; } public static decimal? GetNullableDecimal_2(SqlDataReader reader, string fieldName) { if (reader.IsDBNull(reader[fieldName])) { return null; } return (decimal)reader[fieldName]; } 大多数情况下,字段将为空。 提前致谢!

C#SqlDataReader执行统计信息

我正在创建一个自动数据库查询执行队列,这实际上意味着我正在创建一个逐个执行的SQL查询队列。 使用类似于以下的代码执行查询: using (SqlConnection cn = new SqlConnection(ConfigurationManager.ConnectionStrings[“NorthwindConnectionString”].ConnectionString)) { cn.Open(); using (SqlCommand cmd = new SqlCommand(“SP”, cn)) { cmd.CommandType = CommandType.StoredProcedure; using (SqlDataReader dr = cmd.ExecuteReader()) { while (dr.Read()) { } } } } 我想做的是尽可能多地收集关于执行的信息。 花了多长时间。 受影响的行数。 最重要的是,如果它失败了,为什么它失败了。 实际上我可以获得关于我希望能够保存的执行的任何信息。

SqlDataReader参数不起作用

我有一个Windows窗体,我要求用户在textbox1中输入pcname,然后尝试使用SqlDataReader从数据库读取以获取pc ipaddress然后将pc驱动器映射到我的本地PC。 但由于某些原因,当我在SQL参数中使用文本框时,它无法正常工作。 但是,当我用实际的pcname替换textbox1.text ,它工作正常。 希望有人可以帮我找出参数无法正常工作的原因。 这是我的代码: public void button1_Click(object sender, EventArgs e) { string results = “”; using (SqlConnection cs = new SqlConnection(@”***removed connection string***”)) { cs.Open(); string query = “select stationipaddress from station where stationname = @StationName”; using (SqlCommand cmd = new SqlCommand(query, cs)) { // Add the parameter and set its value […]

读取器关闭时无效的读取尝试

我正在处理C#和MySql请求。 我正在尝试在我的数据库中检索我的数据但是我有这样的错误消息:读取器关闭时无效的读取尝试。 谢谢你们的帮助:) 我有这个function: public MySqlDataReader GetValueFromTable(string table, ArrayList attribut, ArrayList parameter) { string query = string.Empty; MySqlDataReader rdr = null; try { query = “SELECT * FROM `” + table + “` WHERE “; for (int i = 0; i < attribut.Count; i++) { query += attribut[i] as string; query += " = "; […]

下拉列表不与sqldatareader绑定

我的表格收集了大约五下拉。 我的查询如下。 string sql = “SELECT a.clientID ,a.[cname],b.bid,b.[bname],c.contactID, c.[name] FROM ” + ” dbo.[CLIENT] AS a INNER JOIN dbo.[BRANCH] AS b ” + “ON a.clientID = b.clientID JOIN dbo.[CONTACT] AS ” + ” c ON b.bid = c.bid ORDER BY a.clientID “; 然后我跟着将我的下拉单独绑定到各自的列,如下所示。 SqlCommand cmd = new SqlCommand(sql, connection); cmd.CommandType = CommandType.Text; SqlDataReader reader = […]

C# – 网站 – SQL Select语句

我想使用select语句来查找是否存在已存在的记录。 我把代码放在下面,但它在dReader = comm.ExecuteReader()时抛出错误; 而且我不确定为什么。 有帮助吗? string connString = “Data Source=KIMMY-MSI\\SQLEXPRESS;Initial Catalog=Northwind;Integrated Security=True”; SqlDataReader dReader; SqlConnection conn = new SqlConnection(connString); SqlCommand comm = new SqlCommand(); comm.Connection = conn; comm.CommandText = “SELECT * FROM Customers WHERE CustomerID == ” + txtID.Text; comm.Connection.Open(); dReader = comm.ExecuteReader(); if (dReader.HasRows == true) { Response.Write(“Exists”); } 错误: Invalid Column Name […]

SqlDataReader“枚举没有产生任何结果”

一直想弄清楚,但我不能。 我通过SqlCommand执行存储过程,并且返回的SqlDatareader对象没有给我结果,但是,如果在调试器中浏览对象,我可以看到它们。 这是我正在谈论的图像: 在“结果视图”行中,它显示“ 枚举未产生任何结果 ”但在路径中: base – > base – > ResultView – > [0] – >非公共成员 – > _values – > [0], 1 ,[2],[3]显示结果。 任何人都知道如何获得它们? 这是我用来获取的代码和特定列: if (dataReader.Read()) { ProjectFolderId = dataReader[“ItemID”].ToString(); } 但是if返回false。 提前致谢。

超出SqlDataReader的范围错误

我正在使用SqlDataReader并在尝试读取列时遇到此exception… System.IndexOutOfRangeException:记录 这是代码…… SqlCommand select = new SqlCommand(“SELECT RTRIM(LTRIM(PART_NO)) AS PART_NO, record AS CUSTOMER_NO FROM [RMAData].[dbo].[IMPORTING_ORDER_EDI] WHERE sessionID = ‘” + Session.SessionID + “‘”, connection); SqlDataReader reader = select.ExecuteReader(); if (reader.HasRows) { while (reader.Read()) { lblWebMasterMessage.Text += “record ” + reader[“record”].ToString() + “”; … 如果我将lblWebMasterMessage.Text更改为以下它可以正常工作… lblWebMasterMessage.Text += “record ” + reader[“PART_NO”].ToString() + “”; SQL Server表中记录和PART_NO之间的区别在于’record’是主键而int […]

DataReader游标倒带

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