【问题标题】:How to use SQL Update in N-Tier Data Application如何在 N 层数据应用程序中使用 SQL 更新
【发布时间】:2014-09-17 00:14:19
【问题描述】:

我在本教程(click here) 中获得了一些信息和想法,以使用 asp.net 创建我的第一个 N 层数据应用程序,但问题是当我尝试在我的 DataAccessTier 中使用更新查询时,出现 1 个错误DataService.

错误:

Error   1   Cannot implicitly convert type 'int' to 'DataEntityTier.GW_UTADataSet.ActiveDirectory2DataTable'    C:\Users\BA-OJT\documents\visual studio 2010\Projects\GoActiveDirectory\DataService\Service1.cs 59  20  DataService

我该如何解决这个问题?

我的源代码:

项目: DataAccessTier 查询: UpdateBySAN

UPDATE [dbo].[ActiveDirectory2] 
SET [SamAccountName] = @SamAccountName, [Surname] = @Surname, [GivenName] = @GivenName, [EmailAddress] = @EmailAddress, [Enabled] = @Enabled, [Guid] = @Guid, [DateCreated] = @DateCreated, [DateModified] = @DateModified, [SID] = @SID, [EmployeeNumber] = @EmployeeNumber 
WHERE (SamAccountName = @SamAccountName);

SELECT ID, SamAccountName, Surname, GivenName, EmailAddress, Enabled, Guid, DateCreated, DateModified, SID, EmployeeNumber FROM ActiveDirectory2 
WHERE (SamAccountName = @SamAccountName)

项目: DataService 类: IService1.cs

[OperationContract]
DataEntityTier.GW_UTADataSet.ActiveDirectory2DataTable UpdateAccountBySAN(
        string SamAccountName, string Surname, string GivenName, string EmailAddress,
        bool Enabled, string Guid, string DateCreated, string DateModifide, string SID,
        string EmployeeNumber);

项目: DataService 类: Service1.cs

public DataEntityTier.GW_UTADataSet.ActiveDirectory2DataTable UpdateAccountBySAN(
        string SamAccountName, string Surname, string GivenName, string EmailAddress,
        bool Enabled, string Guid, string DateCreated, string DateModified, string SID,
        string EmployeeNumber)
    {
        DataAccessTier.GW_UTADataSetTableAdapters.ActiveDirectory2TableAdapter
            ActiveDirectory2TableAdapter1
                = new DataAccessTier.GW_UTADataSetTableAdapters.ActiveDirectory2TableAdapter();

        return ActiveDirectory2TableAdapter1.UpdateBySAN(
            SamAccountName, Surname, GivenName, EmailAddress, Enabled, Guid, DateCreated,
            DateModified, SID, EmployeeNumber); //ErrorRedLine@ ActiveDirectorr2TableAdapter1.UpdateBysan() Cannot implicitly convert type 'int' to 'DataEntityTier.GW_UTADataSet.ActiveDirectory2DataTable'
    }

【问题讨论】:

  • ActiveDirectory2TableAdapter1.UpdateBySAN 的返回类型是什么?
  • @lboshuizen .UpdateBySAN里面的查询是DataAccessTier 它将更新并返回更新后的数据。
  • 它应该做的是另一件事:-)。 ActiveDirectory2TableAdapter1.UpdateBySAN 当前仅在您的代码中返回的类型是什么?
  • 默认更新语句返回更新的行数。该值是整数类型,无法转换为 DataEntityTier.GW_UTADataSet.ActiveDirectory2DataTable。
  • 想想...如果语句返回更新的行数,是否与整个 DataEntityTier.GW_UTADataSet.ActiveDirectory2DataTable 相同?

标签: c# mysql asp.net n-tier-architecture


【解决方案1】:

在做了一些实验后,我发现了如何解决我自己的问题。

对于那些遵循本教程(click here)并希望在DataAccessTier中使用更新查询的人

要使用更新,您可以使用int 而不是ActiveDirectory2DataTable,因为ActiveDirectory2DataTable 仅用于从DataAccessTier 接收表,并且更新查询将仅返回更新的行数。


项目 DataAccessTier 名称: UpdateAccountBySAN(@parameterhere...)

UPDATE [dbo].[ActiveDirectory2] SET [SamAccountName] = @SamAccountName, [Surname] = @Surname, [GivenName] = @GivenName, [EmailAddress] = @EmailAddress, [Enabled] = @Enabled, [Guid] = @Guid, [DateCreated] = @DateCreated, [DateModified] = @DateModified, [SID] = @SID, [EmployeeNumber] = @EmployeeNumber WHERE (SamAccountName = @SamAccountName);
SELECT ID, SamAccountName, Surname, GivenName, EmailAddress, Enabled, Guid, DateCreated, DateModified, SID, EmployeeNumber FROM ActiveDirectory2 WHERE SamAccountName = @SamAccountName

项目: DataService 类: IService1.cs

[OperationContract]
    int UpdateAccountBySAN( string SamAccountName, string Surname, string GivenName,string EmailAddress,bool Enabled, string Guid, string DateCreated, string DateModified,string SID, string EmployeeNumber);

项目: DataService 类: Service1.cs

public int UpdateAccountBySAN(string SamAccountName, string Surname, string GivenName, string EmailAddress,bool Enabled, string Guid, string DateCreated, string DateModified, string SID,string EmployeeNumber)
    {
        DataAccessTier.GW_UTADataSetTableAdapters.ActiveDirectory2TableAdapter
            ActiveDirectory2TableAdapter1
                = new DataAccessTier.GW_UTADataSetTableAdapters.ActiveDirectory2TableAdapter();
        return ActiveDirectory2TableAdapter1.UpdateBySAN(SamAccountName, Surname, GivenName,
        EmailAddress, Enabled, Guid, DateCreated, DateModified, SID, EmployeeNumber);
    }

并在 PresentationTier 中使用它。

PresentationTier

DataServiceReference.Service1Client newService = new DataServiceReference.Service1Client();

newService.UpdateAccountBySAN(_SamAccountName,_Surename,_GivenName,_EmailAddress,_Enable,_Guid,_DateCreated,_DateModified,_SID,_EmployeeNumber);
//To know how many rows updated use: var _UpdatedRows = newService.UpdateAccountBySAN(<!--some parameter here-->);

这是我对我的问题的回答,我希望这能给未来的支持者一些想法。谢谢。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-04
    • 1970-01-01
    • 2017-03-22
    • 1970-01-01
    • 2011-04-04
    • 1970-01-01
    相关资源
    最近更新 更多