asp的新手。连接到数据库的问题。不确定正确的使用方法

时间:2012-06-08 11:04:30

标签: c# asp.net

过去一周左右我一直在使用asp表单。大多数情况下,我已经习惯了gridview并使用site.master在每个页面上显示菜单,并使用web.config中的连接字符串来访问我的sql server数据库。

但我并没有找到gridview所有那么多才多艺,并且对于这一切应该如何工作有点困惑。我来自PHP和ASP似乎是一个世界不同的。我想要做的是循环一个表并打印出记录但我想使用我自己的循环而不是gridview所以我也可以有自定义列。所以我可以用不同的获取和类似的东西创建动态链接。在PHP中,有连接到DB的语法,编写循环,然后通过回显或类似的方式在其中打印html。

在aspx中我使用C#作为我的语言,所以我理解我在<% - code--%>之间编写c#代码。为此发生

所以asp基本上是使用c#或VB

的脚本

最后我应该在代码后面的Page_load中编写数据库连接,还是只在aspx文件的顶部...

对于新手问题感到抱歉,我真的很感激被指向一个合适的教程,如果有人可以帮助解释所有这些。我发现w3schools的东西,我通常使用的很混乱。

4 个答案:

答案 0 :(得分:1)

如果使用正确,网格视图可能非常强大,您可以做的一件事就是挂钩事件(在数据行绑定上),这将允许您一次操作每一行。

ASP.NET比PHP更多的事件驱动,但是如果你仍然想用PHP的方式做事,理论上可以遍历每个结果。

  using (
           var oConn =
               new SqlConnection(
                   ConfigurationManager.ConnectionStrings["myConnectionStringNameFromWebConfig"].ConnectionString)
           )
        {
            oConn.Open();
            using (SqlCommand oCmd = oConn.CreateCommand())
            {
                oCmd.CommandType = CommandType.StoredProcedure;
                oCmd.CommandText = "p_jl_GetThemeForPortal";
                oCmd.Parameters.Add(new SqlParameter("@gClientID", clientID));
            }

             using(var oDR = oCmd.ExecuteReader())
                {
                    while(oDR.Read())
                    {
                        string x = (string)oDR["ColumnName"];
                        int y = (int) oDR["ColumnName2"];
                        // Do something with the string and int
                    }
                }

        }

此模式(通过使用using语句)确保在每个获取序列结束时关闭连接,因此您没有大量开放数据库连接。

答案 1 :(得分:1)

首先:在Page_load或任何其他方法中选择,在服务器端编写代码 记录。 并且从数据库中选择记录,您可以使用以下代码

string myConnectionString="server=dbserver;database=mydatabase;uid=user;pwd=password;Connect Timeout=120;pooling=true;Max Pool Size=60;";// you can place your connection string in web.config
SqlConnection con = new SqlConnection(myConnectionString);

SqlCommand cmd = con.CreateCommand();
cmd.CommandText = @"SELECT [stuff] FROM [tableOfStuff]";

con.Open();

SqlDataReader dr = null;
try
{
    dr = cmd.ExecuteReader();

    while(dr.Read())
    {
        // construct your html for your table data here
    }
}
catch(SomeTypeOfException ex){ /* handle exception */ }

答案 2 :(得分:0)

为了更好地控制渲染,您可以使用ListView。向下滚动到该页面的底部以获取示例。

答案 3 :(得分:0)

示例aspx:

<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="false">
    <Columns>
        <asp:BoundField DataField="CountryID" HeaderText="ID" ItemStyle-HorizontalAlign="Center" />
        <asp:TemplateField HeaderText="Flag" ItemStyle-HorizontalAlign="Center">
            <ItemTemplate>
                <img src='<%# "img/flags/" + Eval("CountryFlag").ToString()%>' alt="flag" />
            </ItemTemplate>
        </asp:TemplateField>
        <asp:BoundField DataField="CountryName" HeaderStyle-HorizontalAlign="Left" HeaderText="Name" ItemStyle-CssClass="dg_title"/>
        <asp:TemplateField HeaderText="VAT" ItemStyle-HorizontalAlign="Center">
            <ItemTemplate>
                <%# CheckBool(Convert.ToBoolean(Eval("CalculateVat"))) %>
            </ItemTemplate>
        </asp:TemplateField>  
        </Columns>
</asp:GridView>
CheckBool背后的代码中的

是我所做的一个功能:

public string CheckBool(bool toCheck)
{
    if (toCheck)
        return "<img src=\"img/checked.png\" alt=\"Yes\" />";
    else
        return "<img src=\"img/deleted.png\" alt=\"No\" />";
}

Page_Load

protected void Page_Load(object sender, EventArgs e)
{
    GridView1.DataSource = SsUtils.GetCountries();
    GridView1.DataBind();        
}

SsUtils是一个静态类,GetCountries返回List<Country>,它是类国家/地区的集合。但您也可以使用DataSetDataTable作为gridview的数据源。

这只是一个样本,展示了一些可能性。您还可以使用gridview编辑按钮,分页,排序等。