Tag: ado.net

在重用SqlCommand和转换时,我应该调用Parameters.Clear吗?

我在ADO.NET中手动编写事务。 我正在使用的示例重用了SqlCommand ,这似乎是个好主意。 但是,我在命令中添加了参数。 我的问题是:在下面的代码中, command.Parameters.Clear()是否正确? 或者我做错了吗? using (var connection = new SqlConnection(EomAppCommon.EomAppSettings.ConnStr)) { connection.Open(); SqlTransaction transaction = connection.BeginTransaction(); SqlCommand command = connection.CreateCommand(); command.Transaction = transaction; try { foreach (var itemIDs in this.SelectedItemIds) { command.CommandText = “UPDATE Item SET payment_method_id = @batchID WHERE id in (@itemIDs)”; // IS THE FOLLOWING CORRECT? command.Parameters.Clear(); command.Parameters.Add(new SqlParameter(“@batchID”, batchID)); […]

在F#中使用SqlDataReader

在C#中,我使用sql脚本将数据添加到List中,其中T将是一个具有映射到sql脚本的字段/属性的类。 我怎么能在F#中做到这一点? 这篇文章以标准方式使用存储过程。 using (conn) { conn.Open(); using (SqlCommand cmd = new SqlCommand(“dbo.query_here”, conn)) { cmd.CommandText = “dbo.query_here”; cmd.CommandType = System.Data.CommandType.StoredProcedure; cmd.CommandTimeout = 600; cmd.Parameters.Add(new SqlParameter(“@x1”, Convert.ToString(x))); cmd.Parameters.Add(new SqlParameter(“@y1”, y)); cmd.Parameters.Add(new SqlParameter(“@z1”, z)); SqlDataReader reader = cmd.ExecuteReader(); while (reader.Read()) { MyListOfClasses.Add(new MyDataClass(reader.GetInt32(reader.GetOrdinal(“x”)) reader.GetDouble(reader.GetOrdinal(“y”)), reader.GetDouble(reader.GetOrdinal(“a”)), reader.GetDouble(reader.GetOrdinal(“b”)))); } reader.Close(); } conn.Close(); 我意识到F#并不像这样直截了当,但我需要以类似的方式将这些数据放入F#列表中。 也更喜欢那些本质上不起作用的建议,并遵循与C#代码类似的模式。 在之前的一个post中有人建议使用记录,但这与SqlDataReader无关。 最好有一个类列表,这样我就可以在每个项目上使用getter和setter。 我应该在不可避免的评论之前加上“为什么不只是使用C#”。 很明显我可以使用C#,但我正在探索在F#中编写算法的可能性,为此我需要从SQL […]

比较数据集或更好的主意

如何比较一个数据集的值与另一个数据集的值。 第一个数据集 [“正确的记录”]来自SQL Server的列名 [id], [subsNumber] 第二个数据集 [“正确和不恰当的记录”]来自进度数据库,除了1之外的其他列是subsNumber 如何使用来自[“正确记录”]的所有[subsNumber]另一个数据集与来自第二个数据集[“正确的不正确记录”]的匹配记录? 要么 删除第2个数据集中的所有记录[“正确和不正确的记录”],这些记录与第1个数据集中的“subsNumber”列不匹配 或任何其他想法 基本上如何从第二个数据集中获取与第一个数据集具有相同“subsNumber”的所有记录

检索SQL Server表中的特定行范围

我有一个像(OrderID [uniqueidentifier],OrderDesciption [nvarchar])的表结构,我正在使用ADO.Net + C#+ VSTS 2008 + SQL Server 2008.表很大,我想让客户给我两个输入,开始范围索引和结束范围索引,我将返回该范围内的特定行(在开始范围索引和结束范围索引之间)。 例如,如果客户端输入50,100,我想要返回第50行直到第100行。 乔治,提前谢谢

将DataSet \ DataTable转换为CSV

如果有办法从DataTable或DataSet生成CSV文件,请告诉我? 具体而言,无需手动迭代DataTable行和连接。 请帮忙

Activator.CreateInstance与私人密封类

我正在尝试新建一个LocalCommand实例,它是System.Data.SqlClient.SqlCommandSet的私有类。 我似乎能够很好地获取类型信息: Assembly sysData = Assembly.Load(“System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089”); localCmdType = sysData.GetType(“System.Data.SqlClient.SqlCommandSet+LocalCommand”); 但是当我尝试实例化它时,Activator.CreateInstance会抛出exception: object item = Activator.CreateInstance(localCmdType, new object[] { commandText, parameters, num7, commandType }); System.MissingMethodException:找不到类型为“System.Data.SqlClient.SqlCommandSet + LocalCommand”的构造函数。 构造函数参数匹配我在Reflector中看到的签名。 是新的私有类,内部ctor支持不同的CreateInstance重载或什么?

SQL Server:在事务中包装SELECT查询是否有任何性能损失?

作为学习练习,在尝试使用任何ORM(如EF)之前,我想使用ADO.NET和存储过程构建个人项目。 因为我不希望我的代码随着时间的推移变得混乱,我想使用一些模式,如存储库和UoW模式。 除了交易处理之外,几乎所有事情都已经解决了。 以某种方式’模拟’一个UoW,我使用了@jgauffin提供的这个类 ,但阻止我使用该类的是每次你创建该类的新实例( AdoNetUnitOfWork )时,你自动开始一个事务并且有一个很多情况下你只需要读取数据。 在这方面,这是我在我读过的一本SQL书中找到的: 在事务中执行SELECT语句可以在引用的表上创建锁定,这可以阻止其他用户或会话执行工作或读取数据 这是AdoNetUnitOfWork类: public class AdoNetUnitOfWork : IUnitOfWork { public AdoNetUnitOfWork(IDbConnection connection, bool ownsConnection) { _connection = connection; _ownsConnection=ownsConnection; _transaction = connection.BeginTransaction(); } public IDbCommand CreateCommand() { var command = _connection.CreateCommand(); command.Transaction = _transaction; return command; } public void SaveChanges() { if (_transaction == null) throw new InvalidOperationException(“Transaction […]

SQLiteDataAdapter Update方法返回0

我从我的CSV文件中加载了83行,但是当我尝试更新SQLite数据库时,我得到0行……我无法弄清楚我做错了什么。 该方案产出: Num rows loaded is 83 Num rows updated is 0 源代码是: public void InsertData(String csvFileName, String tableName) { String dir = Path.GetDirectoryName(csvFileName); String name = Path.GetFileName(csvFileName); using (OleDbConnection conn = new OleDbConnection(“Provider=Microsoft.Jet.OLEDB.4.0;Data Source=” + dir + @”;Extended Properties=””Text;HDR=Yes;FMT=Delimited”””)) { conn.Open(); using (OleDbDataAdapter adapter = new OleDbDataAdapter(“SELECT * FROM ” + name, conn)) { […]

C#Windows应用程序 – 许multithreading使用相同的连接?

我有一个multithreading的ac#WINDOWS应用程序。 我的理解是,在Web环境中,连接会自动汇集。 我的理解是,在Windows应用程序中,情况并非如此。 因此,对于Windows应用程序,应使用相同的连接,而不是在每次调用后关闭,而是在应用程序关闭时关闭。 我很好奇 – 我是对的吗? 如果是,两个线程是否可以使用相同的连接同时从数据库获取数据集,或者该function是否排队? 谢谢

如何在c#中从Datatable动态构建插入命令

我在使用c#中的dataTable对象动态创建SQL插入语句时遇到了一些问题。 我想知道制作它的最佳实践。这是我的代码片段,我到目前为止已尝试过。 String sqlCommandInsert = “INSERT INTO dbo.RAW_DATA(“; String sqlCommandValue = “”; foreach (DataColumn dataColumn in dataTable.Columns) { sqlCommandInsert += dataColumn + “,”; } sqlCommandInsert += sqlCommandInsert.TrimEnd(‘,’); sqlCommandInsert += “) VALUE(“; for (int i = 0; i < dataTable.Rows.Count; i++) { sqlCommandValue += "'" + dataTable.Rows[i].ItemArray[i] + "',"; } var insertCommand = sqlCommandInsert; sqlCommandValue = […]