如何使用 c# datareader 和存储过程从 spl server 2012 数据表更新单个记录?

Posted

技术标签:

【中文标题】如何使用 c# datareader 和存储过程从 spl server 2012 数据表更新单个记录?【英文标题】:How do I update a single record from an spl server 2012 datatable using a c# datareader and a stored procedure? 【发布时间】:2016-04-20 00:29:56 【问题描述】:

我需要知道如何使用 c# datareader 和存储过程从 sql server 2012 数据表中更新单个记录。我已经有一个存储过程,允许我更新数据表中的单个记录。我只是不知道如何使用 c# 数据阅读器来更新数据表中的记录。例如,假设我正在教一个大学班的女学生并且她结婚了,我需要从我的学生信息数据表中选择她的记录并将她的姓氏更改为她的新婚姓名。在此先感谢您的帮助。

【问题讨论】:

为什么特别说需要使用数据阅读器? .Net datareader 类——顾名思义——用于读取数据,而不是更新。因此,难怪您无法弄清楚如何使用它来更新数据。见msdn.microsoft.com/en-us/library/ms254931(v=vs.110).aspx 【参考方案1】:

DataReader 已断开连接,只读。这就是为什么没有任何方法可以更新其值的原因。

您说您有一个用于更新的存储过程。要执行它,您将创建SqlConnectionSqlCommand 并添加参数,就像执行生成SqlDataReader 的命令一样。但您通常不会调用ExecuteReader(),而是调用ExecuteNonQuery()。这用于执行不返回结果的查询。它返回更新的行数。

【讨论】:

我试试看。感谢 Hannen 先生的提示。非常感谢。【参考方案2】:

您不需要使用 DataReader 来更新 SQL Server 中的记录。因此,使用存储过程,您只需在存储过程中声明一个参数并在 C# 中将值传递给该参数,如下所示:

CREATE PROCEDURE [dbo].[StoredProcedureName] 
    @SOMEPARAMETER AS VARCHAR(50)
AS
BEGIN
    UPDATE tableName
    SET ColumnFromTable = @SOMEPARAMETER
    WHERE !--YourConditionGoesHere
END
GO

在 C# 中传递参数是这样的:

using(SqlConnection con = new SqlConnection("connectionSTringHere")

   SqlCommand cmd = new SqlCommand("StoredProcedureName",con);
   cmd.CommandType = CommandType.StoredProcedure;
   cmd.Parameters.Add("@SOMEPARAMETER",SqlDbType.VarChar).Value = "SomeValue";
   cmd.ExecuteNonQuery();

【讨论】:

感谢 Borlagdan 先生的示例和详细解释。我会以你的例子为起点,看看它会把我带到哪里。 只是为了一个你在互联网上找不到的快捷方式。如果你使用的是 SQL Server 2008 及更高版本,你可以去对象资源管理器 - 下拉你的数据库 - 去可编程性吧单击存储过程文件夹并单击新建,然后只需按 CTRL + SHIFT M :D

以上是关于如何使用 c# datareader 和存储过程从 spl server 2012 数据表更新单个记录?的主要内容,如果未能解决你的问题,请参考以下文章

从 DataReader 检索 SqlGeography 类型时如何解决 InvalidCastException?

Sql 直接从 DataReader 中选择

具有重复列名的 DataReader

DataReader相关知识点

存储过程正确运行,但 DataReader 得到错误结果...有时

DB2DataReader 对象有数据但 HasRows 属性为 false