Tag: ado.net

使用数据适配器更新记录时出现并发错误

这是我的表: 学生 : StudentId int PK autoincrement,Name varchar(20) 当我尝试更新上次添加的记录时,我发现错误: 错误 : Concurrency violation: the UpdateCommand affected 0 of the expected 1 records. 这是我的代码: using (var connection = new SqlConnection(“MyConnectionstring”)) { connection.Open(); SqlDataAdapter adapter = new SqlDataAdapter(); SqlCommandBuilder builder = new SqlCommandBuilder(adapter); adapter.SelectCommand = new SqlCommand(“select * from Student”, connection); DataTable dt = new DataTable(); adapter.Fill(dt); […]

Access中的SELECT @@ IDENTITY始终返回0

我一直试图找到解决这个问题的方法,但到目前为止还没有任何效果。 private void Insert() { string ConnectionStringAccess = Provider=Microsoft.ACE.OLEDB.12.0;Data Source=###Jet OLEDB:Database Password=###; string query2 = “Select @@Identity”; int id = -1; string Query = “INSERT INTO tblTable (EmpNo, Name) VALUES (132, ‘TestName’);”; OleDbConnection con = new OleDbConnection(ConnectionStringAccess); OleDbCommand cmd = new OleDbCommand(Query, con); try { con.Open(); if (cmd.ExecuteNonQuery() == 1)//the insert succeded { cmd.CommandText = […]

如何准备包含NText(clob)参数的ADO.NET语句

我正在更新一个现有的应用程序,它使用工厂来构建预准备语句,然后在以后执行它们,这对系统的其余部分起作用,但我的任务是添加对使用NText的语句的调用,以及我无法弄清楚如何正确地准备声明。 我得到一个运行时错误“SqlCommand.Prepare方法要求所有变量长度参数具有明确设置的非零大小。” 但我不确定长度使用什么值 强制性代码示例: SqlCommand update = new SqlCommand(“UPDATE Log.Response_File_Log ” + “SET File = @File ” + “, DateFileReceived = GETDATE() ” + “WHERE RunID = @RunID”, _connection); update.Parameters.Add(new SqlParameter(“@File”, SqlDbType.NText)); update.Parameters.Add(new SqlParameter(“@RunID”, SqlDbType.Int)); update.Prepare();

SqlTransaction中的SqlDataAdapter.Fill() – 这是一个不好的做法吗?

因为我有一个带有DataSet QueryDB(string spName, DBInputParams inputParams)方法的“DB util”类,我用它来调用数据库,所以我想重用这个方法来支持事务调用。 所以,最后我将在SqlTransaction中有一个SqlDataAdapter.Fill。 这会是一种不好的做法吗? 因为我很少在事务中看到DataAdapter.Fill的使用,更常见的是ExecuteReader()。 有没有捕获? Edit1:事情是我的事务内部经常需要检索一些数据(例如自动ID)…这就是为什么我想把它作为DataSet。 Edit2:奇怪的是当我在2个不同进程的for循环(10000)中使用这种方法时,我得到“事务(进程ID 55)在锁资源上与另一个进程死锁,并被选为死锁牺牲品。重新运行事务“。 。 这是正确的行为吗? Edit3 :(回答Edit2)我正在使用IDENT_CURRENT(‘XTable’) ,这是错误的来源。 在我回到SCOPE_IDENTITY() ,一切都已经解决了。

使DataGridView可视化地反映其DataSource中的更改的正确方法

假设DataGridView将其DataSource属性设置为DataView实例。 DataGridView dgv; DataTable dt; // … dt gets populated. DataView dv = dt.DefaultView; dgv.DataSource = dv; // … dt gets modified // The DataGridView needs to update to show these changes visually // What goes here? 我知道你可以将dgv.DataSource设置为null ,然后再设置为dv 。 但这似乎很奇怪。 我相信还有其他几种方法。 但是,正确的官方方式是什么?

用于x64应用程序的Microsoft.ACE.OLEDB.12.0驱动程序 – 如何使其与x86 MS Office一起安装?

Microsoft.ACE.OLEDB.12.0驱动程序无法在我的PC上运行,我正在尝试修复它。 连接打开时出错:“无法找到提供程序。可能未正确安装。” 这是我现在得到的: 我已经构建了带有连接字符串的x64 C#ADO.NET控制台应用程序,用于连接到’* .mdb’: “Provider = Microsoft.ACE.OLEDB.12.0;数据源= …” 我有两个PC-A A和B,都有Windows 7 x64和相同的MS Office 2013 x86版本 相同的exacutable将在PC-A上运行而不会在PC-B上运行 还有其他几台具有类似配置的PC,并且使用相同的可执行文件都抛出相同的exception 我有很多类似问题的问题,并建议使用x64 Office版本,但这不是我的选择。 由于我的PC-A具有x86 Office和x64位驱动程序在x64应用程序中正常工作,我正在寻找步骤来发现它在该特定计算机上的工作原理以及如何在其他计算机上复制它。 有人可能会误认为这个问题是手动安装的64位ms-access-odbc-drivers-32-bit-office-present-present,但事实并非如此,我试图安装x64带有/被动选项的驱动程序,但是虽然然后驱动程序在C#app上运行,但在此之后我无法在我的PC上启动Access。 在PC-A上,您可以使用Access,没有问题,仍然使用x64驱动程序。

ADO.NET的SqlCommand.CommandTimeout如何工作?

考虑一个存储过程,该过程在60秒内更新某些行而不使用事务。 我们将ADO.NET的SqlCommand.Timeout设置为30秒。 SqlCommand.Timeout = 30; 当超时发生在30秒时,存储过程是否会继续在数据库服务器中运行? 服务器如何将此信息传达给客户端?

如何连接到DB2?

我必须连接到其他系统上安装的DB2数据库。 我有服务器的机器名,我想要连接的数据库名,端口号和凭据。 我的DB2系统上没有安装任何客户端。 我想使用OLEDB连接。 我可以在不安装客户端的情况下实现此目 还让我知道什么参考dll将帮助我实现这一点,即我应该使用什么 – 用于DB2的IBM OLE DB提供程序或用于IBM DB2的Microsoft OLEDB提供程序或其他? 我在哪里可以找到它们?

如何从DataRow获取原始DataColumn值?

我有一个DataTable,我想找出所有修改过的数据行的原始列值。 我正在使用以下方法在DataRow被修改之前获取Orginal列值 DataRow[] dataRowArray = dataTableInstance.Select(null,null,DataViewRowState.OriginalRows); DataRow originalDataRow = dataRowArray[rowIndex][columnIndex, DataRowVersion.Original] 请指出我在这里做错了什么? 上面的代码没有给我原始列,而是它给了我最新的修改列值。 谢谢。 尼基尔

在asp.net中使用SQL Server存储过程输出c#

我是新手使用存储过程。 我们有一个现有系统,它使用检查用户名和URL路径的存储过程。 存储过程将检查用户详细信息是否存在。 如果存在,则返回1,否则返回0。 我试图通过提供用户详细信息和路径来编写asp.net代码来调用此存储过程,然后使用asp.net中返回的0或1值。