2017-02-04 2 views
1

У меня есть большой стол в моей базе данных SQL Server следующим образом:Update только отредактированные поля в C# приложения

CREATE TABLE [dbo].[Servers](
[ServerId] [uniqueidentifier] NOT NULL, 
[ServerName] [nvarchar](50) NULL, 
[HostName] [nvarchar](50) NULL, 
[OperatingSystem] [nvarchar](50) NULL, 
[OSVersion] [nvarchar](50) NULL, 
[OSComment] [nvarchar](200) NULL, 
[ServerManufacturer] [nvarchar](50) NULL, 
[ServerModel] [nvarchar](50) NULL, 
[IP] [binary](4) NULL, 
[Mask] [binary](4) NULL, 
[Gateway] [binary](4) NULL, 
[PrimaryDNS] [binary](4) NULL, 
[SecondaryDNS] [binary](4) NULL, 
[NetworkType] [nvarchar](20) NULL, 
[NetworkComment] [nvarchar](200) NULL, 
[SiteId] [uniqueidentifier] NULL, 
[DataCenterRow] [smallint] NULL, 
[DataCenterRack] [smallint] NULL, 
[AntiVirusProduct] [nvarchar](50) NULL, 
[AntiVirusVersion] [nvarchar](50) NULL, 
[AntiVirusComment] [nvarchar](200) NULL, 
[PassedOSSecurity] [nvarchar](50) NULL, 
[Approved] [bit] NULL, 
    [ApprovedBy] [nvarchar](50) NULL, 
CONSTRAINT [PK_Servers] PRIMARY KEY CLUSTERED 
(
    [ServerId] ASC 
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] 
) ON [PRIMARY] 

В моей C# Windows Forms приложений У меня есть форма, которая отображает содержимое этой таблицы и выполняет операцию Display/Create/Delete/Update.

Теперь, когда я редактирую определенные поля в записи, мне нужно выполнить запрос, который будет обновлять только те поля, которые были обновлены. Другими словами, мне нужен запрос, который будет динамически идентифицировать отредактированные поля и обновить их.

Хранимая процедура, которая обновляет столбцы один на один выглядит следующим образом:

CREATE PROCEDURE dbo.UpdateServer @ServerName nvarchar(50), @HostName nvarchar(50),@OperatingSystem nvarchar(50), 
           @OSVersion nvarchar(50), @OSComment nvarchar(50),@ServerManufacturer nvarchar(50), 
           @ServerModel nvarchar(50), @IP nvarchar(15),@Mask nvarchar(15), @Gateway nvarchar(15), 
           @PrimaryDNS nvarchar(15), @SecondaryDNS nvarchar(15), @NetworkType nvarchar(20),@NetworkComment nvarchar(200), 
           @SiteId uniqueidentifier, @DataCenterRow smallint, @DataCenterRack smallint, @AntiVirusProduct nvarchar(50), 
           @AntiVirusVersion nvarchar(50), @AntiVirusComment nvarchar(200), @PassedOSSecurity bit, @Approved bit, 
           @ApprovedBy nvarchar(50) 
    AS 
    UPDATE [SystemsInfo].[dbo].[Servers] 
    SET [email protected],[email protected],[email protected],[email protected],[email protected],[email protected],[email protected],IP=(select dbo.fnBinaryIPv4(@IP)), 
      Mask=(select dbo.fnBinaryIPv4(@Mask)),Gateway=(select dbo.fnBinaryIPv4(@Gateway)),PrimaryDNS=(select dbo.fnBinaryIPv4(@PrimaryDNS)),SecondaryDNS=(select dbo.fnBinaryIPv4(@SecondaryDNS)), 
[email protected],[email protected],[email protected], 
    [email protected], [email protected], [email protected], [email protected], [email protected], [email protected], 
       [email protected],[email protected]; 
+0

Вы используете linq для sql или sqlclient? –

+0

sqlclient, я вызываю хранимую процедуру для выполнения запроса. –

+0

У вас есть GridView, держащий все эти записи? И вы хотите, чтобы ваше приложение автоматически создавало запрос, который обновляет все обновленные поля в вашем приложении? – Everyone

ответ

0

Я думаю, что комментарий при условии, Стив является основным способом.

Но, еще один вариант заключается в отслеживании поля, отредактированное пользователем в вашем пользовательском интерфейсе (например. CellEndEdit или CellValueChanged), а создать динамический запрос SQL в вашем C# кода (с использованием StringBuilder и SqlParameters) и, наконец, выполнить его ,

Смежные вопросы