【问题标题】:How to use Get and Set with stored procedures如何在存储过程中使用 Get 和 Set
【发布时间】:2015-03-24 10:52:40
【问题描述】:

我使用 SQL Server 2008 和 C# 已经有一段时间了,但一直在为它的 OOP 方面苦苦挣扎。我通常如下写我的Insert 语句。以下摘录是我正在玩的一个 AJAX 网站

SqlCommand scCommand = new SqlCommand("spLocationsCreate", APMConn);
scCommand.CommandType = CommandType.StoredProcedure;

scCommand.Parameters.Add("@LocationCode", SqlDbType.VarChar, 5).Value = txtLocationCode.Text;
scCommand.Parameters.Add("@Location", SqlDbType.NVarChar, 100).Value = txtLocation.Text;

scCommand.Connection.Open();
scCommand.ExecuteNonQuery();
scCommand.Connection.Close();

上面的工作并向数据库添加了一条记录,我想我会开始使用上面的类 - Set 和 Get。写了下面的类

public class clsLocations
{
    public clsLocations()
    {
        //
        // TODO: Add constructor logic here
        //
    }

    private string _LocationCode;
    private string _Locations;

    public string LocationCode
    {
        get { return _LocationCode; }
        set { _LocationCode = value; }
    }

    public string Locations
    {
        get { return _Locations; }
        set { _Locations = value; }
    }
}

我理解上述内容,但在如何将它与存储过程一起使用以及如何调用它方面遇到了困难。我在网上读过很多文章,但很多都是使用直接 SQL 而不是存储过程和参数

任何帮助将不胜感激

【问题讨论】:

    标签: c# sql-server-2008 stored-procedures


    【解决方案1】:

    一个常见的模式是在你的 clsLocations 类上有一个 Save() 方法,它调用存储的过程并相应地填充参数。例如:

    public void Save(SqlConnection apmConn)
    {
        SqlCommand scCommand = new SqlCommand("spLocationsCreate", apmConn);
            scCommand.CommandType = CommandType.StoredProcedure;
            scCommand.Parameters.Add("@LocationCode", SqlDbType.VarChar, 5).Value = this.LocationCode;
            scCommand.Parameters.Add("@Location", SqlDbType.NVarChar, 100).Value = this.Locations;
            scCommand.Connection.Open();
            scCommand.ExecuteNonQuery();
            scCommand.Connection.Close();
    }
    

    为了将来的调查,您可能需要考虑将数据库代码从模型类中分离出来。您可以使用 ORM,例如 EntityFramework。或者一个简单的数据访问层,由用于调用存储过程的静态函数组成。

    【讨论】:

    • 编辑以添加(未经测试的)示例
    • 我明白你上面写的,但它怎么知道txtLocationCode是this.LocationCode
    • 抱歉,我错过了这一点。因此,您可以在表单上有一个按钮,单击该按钮会创建一个新的 clsLocations 实例并从表单设置它的属性。或者,您可以在设置器中添加对 Save() 的调用,以便在更改时自动保存,但如果您遵循该路径,请注意性能。
    • 非常感谢您的帮助,我将您上面的代码复制到了我的课堂上,您能否以最佳方式编写完整的代码来实现这一点。我最初在顶部编写它的方式更短,而且效果很好,但现在每个人似乎都在使用类编写它,生成的代码比必要的多。我不明白它的意义非常感谢您的帮助
    【解决方案2】:

    认为我已经破解了......这可行,但请告知我是否做错了什么

    我的班级就在顶部,并将其添加到代码下方

    public void SaveLocation(SqlConnection APMConn)
    {
        SqlCommand scCommand = new SqlCommand("spLocationsCreate", APMConn);
        scCommand.CommandType = CommandType.StoredProcedure;
        scCommand.Parameters.Add("@LocationCode", SqlDbType.VarChar, 5).Value = _LocationCode;
        scCommand.Parameters.Add("@Location", SqlDbType.NVarChar, 100).Value = _Locations;
        scCommand.Connection.Open();
        scCommand.ExecuteNonQuery();
        scCommand.Connection.Close();
    }
    

    在我的主程序中有以下内容

    protected void InsertNewLocations(SqlConnection conn)
    {
        clsLocations NewLoc = new clsLocations();
        NewLoc.LocationCode = txtLocationCode.Text;
        NewLoc.Locations = txtLocation.Text;
        NewLoc.SaveLocation(APMConn); 
    }
    

    【讨论】:

      猜你喜欢
      • 2021-06-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-04-15
      相关资源
      最近更新 更多