Tag: ado.net

如何通过每次迭代重用SqlCommand参数?

我想为我的数据库实现一个简单的删除按钮。 事件方法看起来像这样: private void btnDeleteUser_Click(object sender, EventArgs e) { if (MessageBox.Show(“Are you sure?”, “delete users”,MessageBoxButtons.OKCancel, MessageBoxIcon.Warning) == DialogResult.OK) { command = new SqlCommand(); try { User.connection.Open(); command.Connection = User.connection; command.CommandText = “DELETE FROM tbl_Users WHERE userID = @id”; int flag; foreach (DataGridViewRow row in dgvUsers.SelectedRows) { int selectedIndex = row.Index; int rowUserID = int.Parse(dgvUsers[0,selectedIndex].Value.ToString()); command.Parameters.AddWithValue(“@id”, […]

entity framework – 期望’providerInvariantName’参数的非空字符串

好吧,这可能与EF无关。 我正在尝试使用代码优先function,以下是我写的: – var modelBuilder = new ModelBuilder(); var model = modelBuilder.CreateModel(); using (AddressBook context = new AddressBook(model)) { var contact = new Contact { ContactID = 10000, FirstName = “Brian”, LastName = “Lara”, ModifiedDate = DateTime.Now, AddDate = DateTime.Now, Title = “Mr.” }; context.contacts.Add(contact); int result = context.SaveChanges(); Console.WriteLine(“Result :- “+ result.ToString()); } 上下文类: […]

强类型在.NET框架中意味着什么?

今天早上正在阅读一本书,我在其中找到了如下所述的段落: 表中的每个数据字段都是一个强类型数据成员,完全符合.NET的Common Type System。 上述行是否意味着“用不同语言编写的对象可以相互交互” 如果它意味着上述行,那么上述行的含义就是说不同的语言可以互相交互 我想尝试一个例子,但到目前为止没有成功。 或者它是我缺少的东西,需要知道。 请帮我理解。 提前致谢

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]; } 大多数情况下,字段将为空。 提前致谢!

ADO.NET:安全地为所有VarChar参数指定SqlParameter.Size的-1?

我们有一个现有的C#代码体,它在很多地方调用参数化的临时SQL Server查询。 我们从不指定SqlParameter.Size,并且记录了在这种情况下,SqlParameter类从参数值推断出大小。 我们最近才意识到这会产生SQL Server计划缓存污染问题,其中为每个不同的参数大小组合缓存单独的计划。 幸运的是,每当我们创建一个SqlParameter时,我们都是通过一个实用方法来实现的,所以我们有机会在该方法中添加几行并使这个问题消失。 我们正考虑添加以下内容: if((sqlDbType == SqlDbType.VarChar) || (sqlDbType == SqlDbType.NVarChar)) m_sqlParam.Size = -1; 换句话说,每次传递varchar参数时,都将其作为varchar(max)传递。 基于一些快速测试,这很好用,我们可以看到(通过SQL Profiler和sys.dm_exec_cached_plans)每个ad-hoc查询的缓存中现在有一个计划,以及字符串参数的类型现在是varchar(max)。 这似乎是一个简单的解决方案,必须有一些隐藏的,破坏性能的缺点。 有人知道吗? (请注意,我们只需要支持SQL Server 2008及更高版本。) 更新(1月16日) 是的,有一个隐藏的,破坏性能的缺点! 非常感谢Martin Smith,他的回答(见下文)向我指出了正确的分析方法。 我使用我们的应用程序的Users表进行了测试,该表具有定义为nvarchar(100)的Email列,并且在Email列上具有非聚集索引(IX_Users_Email)。 我修改了Martin的示例查询,如下所示: declare @a nvarchar(max) = cast(‘a’ as nvarchar(max)) –declare @a nvarchar(100) = cast(‘a’ as nvarchar(100)) –declare @a nvarchar(4000) = cast(‘a’ as nvarchar(4000)) select Email from […]

注入存储库上的IDisposable

我有以下ADO .Net存储库 public class Repository : IRepository, IDisposable { private readonly IUnitOfWork UnitOfWork; private SqlConnection Connection; public Repository(IUnitOfWork unitOfWork, connectionString) { UnitOfWork = unitOfWork; Connection = new SqlConnection(connectionString); Connection.Open(); } public MyObject FindBy(string userName) { //…Ado .Net command.ExecuteReader, etc. } } 此存储库向IOS容器注入域服务,使用方式如下: public class UserDomainService : IUserDomainService { private readonly IRepository Repository; public UserDomainService(IRepository repository) […]

C#DataTable内部联接与动态列

我试图以与此问题类似的方式将两个DataTable连接在一起: C#中DataTables的内部联接 我正在尝试将输出变为单个“组合”表,其中包含两个原始表中的列。 它们都有一个共同的日期戳列。 给出的答案适用于具有固定列的DataTables,但如果它们是动态创建的,并且可以包含任意数量的列,那么我该如何加入它们呢? 例如 T1 (datestamp, t1Column1, t1Column2, t1ColumnN…) T2 (datestamp, t2Column1, t2Column2, t2ColumnN…) 我想加入以创建以下内容: J1 (datestamp, t1Column1, t1Column2, t1ColumnN, …, t2Column1, t2Column2, t2ColumnN…) 这可能吗?

从SqlDataReader读取int值

嗨,任何人都可以请帮助我从int值的数据库中获取我很难获取int值,它适用于varchar但不是int可以有人帮助我请 if (int.TryParse(TxtFarmerCode.Text, out intValue)) { using (SqlConnection sqlConn = new SqlConnection(“Data Source=TANYA-PC;Initial Catalog=biore1;Integrated Security=True”)) //here goes connStrng or the variable of it { sqlConn.Open(); string sqlQuery = @”SELECT farmername,villagename,gender,farmsize FROM cottonpurchase WHERE farmercode = @code”; using (SqlCommand cmd = new SqlCommand(sqlQuery, sqlConn)) { cmd.Parameters.Add(“@code”, SqlDbType.Int).Value = intValue; using (SqlDataReader reader = cmd.ExecuteReader()) {; if […]

在SQL Server 2014中使用TransactionScope围绕存储过程与事务

我使用C#和ADO.Net与TransactionScope在ASP.Net应用程序中运行事务。 此事务应该在多个表中保存一些数据,然后向订阅者发送电子邮件。 问题 :当它包含对SQL Server 2014中具有自己的事务的存储过程的调用时,它是否是TransactionScope的有效使用,或者我是否应该从存储中删除SQL事务语句,即begin tran , commit tran和rollback tran语句在此TransactionScope中调用的过程? 下面提到了此场景的C#代码以及存储过程的T-SQL代码。 使用TransactionScope C#代码: try { using (TransactionScope scope = new TransactionScope()) { using (SqlConnection connection1 = new SqlConnection(connectString1)) { // Opening the connection automatically enlists it in the // TransactionScope as a lightweight transaction. connection1.Open(); // SaveEmailData is a stored procedure that has a […]

SqlConnection.CreateCommand和新的SqlCommand之间有什么区别吗?

在.Net中,创建新的SqlCommand对象和将SqlConnection附加到它并在现有的SqlConnection对象上调用CreateCommand()之间是否存在任何function差异?