asp.net - MySQL 数据访问层 : How do you store your queries?

标签 asp.net mysql visual-studio-2010 data-access-layer

我作为独立开发人员构建这个项目已经有一段时间了,虽然我在前端和中间层很舒服,但我真的不认为我正在按照我应该的方式做数据库,原因是因为我根本不知道任何其他方式。我目前获取数据的方式是在我的 MySQL 工作台中测试查询,并将 SQL 作为字符串文字复制并粘贴到调用数据库的方法中,提取数据并混合我的对象。

直到最近,这才真正成为问题,当时我不得不创建一个查询的怪物,这让我想到也许有更好的方法来做到这一点。我没有分离出正式的 DAL,所以我知道那里还有改进的余地,但我很好奇存储 SQL 字符串的正确方法是什么。我假设 VS10 中内置了一个工具,我可以在其中将 SQL 作为 SQL 而不是字符串来操作和使用。

最佳答案

您应该在存储过程中执行此操作。这基本上会格式化并存储您的查询。您设置从您的代码传入的参数,然后读出结果。

例子:

C# 方法:

private void SetNote()
{
    const string sql = "sp_SelectControllerNoteByID";
    using (var conn = MocSystem.GetMocDbConnection())
    {
        using (var comm = new SqlCommand(sql, conn))
        {
            comm.CommandType = CommandType.StoredProcedure;
            comm.Parameters.Add(new SqlParameter("@ControllerNoteID", ControllerNoteId));
            try
            {
                conn.Open();
                using (var rdr = comm.ExecuteReader())
                {
                    while (rdr.Read())
                    {
                        CommentText = rdr["NoteText"].ToString();
                        _commentor = new User(new Guid(rdr["NoteAuthor"].ToString()));
                        CommentDate = (DateTime)rdr["NoteDate"];
                        MocRequestId = (int)rdr["MocRequestID"];
                    }
                }
            }
            catch (Exception ex)
            {
                HasError = true;
                ErrorMessage += "\nThere was a problem building the note: " + ex.Message;
            }
        }
    }
}

DBMS(本例中为sql server)上的存储过程:

ALTER proc [dbo].[sp_SelectControllerNoteByID]
    @ControllerNoteID   int
AS
    SELECT
        ControllerNoteID,
        NoteText,
        NoteDate,
        NoteAuthor,
        MocRequestID
    FROM
        ControllerNotes
    WHERE
        ControllerNoteID = @ControllerNoteID

所以在这里我们调用存储过程,在这种情况下它只是一个简单的选择语句,然后我们通过 ADO 将它读出到一个对象中。现在,通过这种方式,您无需重新编译即可修改查询。除非您添加参数,否则您还必须更新代码中的参数。

关于asp.net - MySQL 数据访问层 : How do you store your queries?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10732211/

相关文章:

c# - GridView ASP .NET 中标题文本的垂直显示

mysql - 在 MySQL 中创建用户帐户时如何有效更新 mongodb?

php - 使用php从MySQL数据库下载word文档

c# - PostBuildEvent 创建目录

c++ - 决策搜索树中的 LINK 错误 2019 和 1120

asp.net - 带文本的工具提示 + databinder.eval

javascript - 从标签中显示或隐藏 div 单击

c# - 在回发时保持滚动位置不起作用

mysql - 改变表增加索引长度

c# - 从后面的代码调用 jquery