【问题标题】:ASP.NET C# & Stored ProceduresASP.NET C# 和存储过程
【发布时间】:2010-11-18 03:03:57
【问题描述】:

我正在从 MSVS 中的 DataTableAdapters 过渡到在 MS SQL Server 中创建存储过程。

这是我目前所拥有的。

protected void Submit_Click(object sender, EventArgs e)
    {
         var conString = ConfigurationManager.AppSettings["ConnectionString"].ToString(); 
         using (SqlConnection con = new SqlConnection(conString))
        {
            using (SqlCommand cmd = new SqlCommand("getAdministrators", con))
            {
                cmd.Parameters.Add("@userName", SqlDbType.VarChar).Value = userNameTB.Text;
                cmd.Parameters.Add("@password", SqlDbType.VarChar).Value = passwordTB.Text;
                cmd.CommandType = CommandType.StoredProcedure;
                using (SqlDataAdapter da = new SqlDataAdapter(cmd))
                {
                    DataSet ds = new DataSet();
                    da.Fill(ds);
                }
            }
        }
    }

我想获取所有行/列并将它们存储在 DataSet 中,并根据我的意愿使用返回的值来做任何我想做的事情。我缺少什么来实现这一点。或者如果有人有一篇文章也可以提供帮助?

我更新了代码以使用using

我认为代码正在慢慢到达那里......

【问题讨论】:

  • 注意:您可能应该养成使用using 的习惯,例如SqlCommandSqlConnection
  • 明确。 “迟开早关”。还有 - 你确定这些字段是VarChar 而不是NVarChar
  • 就在 On_Click 的开头我扔了一个 using 在那里?有代码sn-ps或文章吗?
  • 我编辑了上面的代码以使用 USING
  • 只是一个建议,但是当您根据收到的反馈继续编辑原始答案时会非常混乱...使得问题和答案的流程非常难以遵循/理解...也许可以发布回复,以便在路上阅读问题的人可以理解发布的答案和 cmets?当您最终完成时,您的代码 sn-p 将起作用,没有人会理解为什么有人提出更改它的建议......

标签: c# asp.net stored-procedures


【解决方案1】:

这个 sn-p 有效:

    public static DataSet GetAll(int id)
    {
        using (SqlConnection con = new SqlConnection(Database.ConnectionString))
        {
            using (SqlCommand cmd = new SqlCommand("sp_ContactGetAll", con))
            {
                cmd.CommandType = CommandType.StoredProcedure;
                using (SqlDataAdapter da = new SqlDataAdapter(cmd))
                {
                    DataSet dsData = new DataSet();
                    da.Fill(dsData);
                    return dsData;
                }
            }
        }
    }

【讨论】:

  • 我在点击按钮时触发了代码,那么我应该用什么替换 RETURN 呢?
  • 不返回任何东西,将我的函数声明更改为您的 submit_click 事件声明并删除返回语句。
【解决方案2】:

我可能是错的,但我希望以下工作:

using(var reader = cmd.ExecuteReader()) {
  ds.Tables[0].Load(reader);
}

(假设您要填充第零个表)

【讨论】:

  • 我想把所有东西都归还到一个井井有条的集合中,并使用最少的代码来引用它。
  • @Bry4n 一个很好的目标 - 不过,我不明白这意味着我的回复。
  • 我不知道。我可能不知道要问的正确问题。我从未在 C# 中使用过 SP,我主要在工作中使用 ColdFusion,这是非常不同的。就像我使用 DataSets 和 ExecuteReader 一样吗?哪个需要进入或退出连接?哈
【解决方案3】:

http://msdn.microsoft.com/en-us/library/9kcbe65k.aspx

我猜你错过了cmd.ExecuteReader

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多