ASP.NET C#和存储过程

3

我正在从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”。
我认为代码正在慢慢接近目标...

2
注意:你应该养成使用“using”来处理像“SqlCommand”,“SqlConnection”等内容的习惯。 - Marc Gravell
“绝对没错。晚开,早关。” 另外,你确定这些字段是 VarChar 而不是 NVarChar 吗? - RPM1984
在 On_Click 的开头加一个 using?有什么代码片段或文章可以参考吗? - balexander
我已经编辑了上面的代码,使用了USING。 - balexander
这只是一个建议,但是当您根据反馈不断编辑原始答案时,会非常令人困惑...这使得问题和答案的流程非常难以跟踪/理解...也许可以发表回复,这样后来阅读问题的人就可以理解已发布的答案和评论?当您最终完成时,您的代码片段将起作用,而没有人会理解为什么有人建议更改它... - E.J. Brennan
啊,好的观点,我的错。我没有考虑到这一点。我回家后可以重新发布原始代码。 - balexander
3个回答

2
这段代码有效:
    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? - balexander
不要更改函数声明,而是将其转换为您的submit_click事件声明并删除返回语句。 - E.J. Brennan

0

我可能错了,但是我认为以下代码可以正常工作:

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

(假设您想填充第零张表)


我想将所有内容返回到一个漂亮有序的集合中,并使用最少量的代码来引用它。 - balexander
@Bry4n 你的目标很高 - 不过我不明白这对我的回复意味着什么。 - Marc Gravell
我不知道。我可能不知道该问什么问题。我从未在C#中使用过SPs,我主要在工作中使用ColdFusion,这非常不同。例如,我是否使用DataSets和ExecuteReader?哪个需要在连接内或外?哈 - balexander

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接