none
code-behind寫法 RRS feed

  • Frage

  •  

    請問...

    我將下列程式 拿到.cs裡做 是不能秀出資料的,請問為什麼呢?

    程式碼區塊

     protected void Page_Load(object sender, EventArgs e)
        {
            Label1.Text = "客戶名稱:" + Request.QueryString["customer_name"];
        }

     

     

    還有...我想在後端做SQL查詢 把結果Status0,Status1,Status2傳到前端, 請問我 where 部分這樣寫對嗎?可以抓到request值嗎?

    error為"CS0200: 無法指定屬性或索引子 'System.Data.Common.DbDataReader.this[string]' -- 其為唯讀"

     

    程式碼區塊

    protected void Page_Load(object sender, EventArgs e)
        {
             string Status0, Status1, Status2;
             string strCon = "Data Source=10.xx.xx.xx;Initial Catalog=eFMS.net;User ID=sa;Password=xx ";
            SqlConnection myConn = new SqlConnection(strCon);
            myConn.Open();
            string sql = "select * from car_status where customer_id ='" + Request.QueryString["customer_id"] + "'";
            SqlCommand cmd = new SqlCommand(sql, myConn);
            SqlDataReader reader = cmd.ExecuteReader();
            if (reader.HasRows)
            {
                while (reader.Read())
                {
                    if (reader["status_id"]= 0)
                        Status0 = rs2("status");
                    else if (reader["status_id"]= 1)
                        Status1 = rs2("status");
                    else if (reader["status_id"]= 2)
                        Status2 = rs2("status");
                }
                reader.Close();
                myConn.Close();
            }
            else
            {
                Status0 = "待命";
                Status1 = "休息";
                Status2 = "作業";
            }


       

        }

     

     

    Dienstag, 11. Dezember 2007 09:21

Antworten

  • 我不知道你的傳法是如何。

    應該 URL 要是像這樣才接的到值吧:

    程式碼區塊

    myPage.aspx?customer_id=1192&customer_name=Me

     

     

    我也沒看到你的頁面宣告,有沒有和 CS 綁在一起不得而知,如果沒有綁在一起,沒作用很正常。

     

    至於你的第二個問題,請使用 Label2.Text = Status0 的方式。

    如果你要這樣做,你必須要:

     

    1. 將變數宣告放到 class-level。

    2. 呼叫 Page.DataBind()。

    Mittwoch, 12. Dezember 2007 08:10
    Moderator

Alle Antworten

  •  yating 寫信:

     

    請問...

    我將下列程式 拿到.cs裡做 是不能秀出資料的,請問為什麼呢?

    程式碼區塊

     protected void Page_Load(object sender, EventArgs e)
        {
            Label1.Text = "客戶名稱:" + Request.QueryString["customer_name"];
        }

     

     

    施主,為什麼得要問你自己吧。

    URL 中的 QueryString 沒有值的話,寫一萬次一樣抓不到資料。

     

     yating 寫信:

    還有...我想在後端做SQL查詢 把結果Status0,Status1,Status2傳到前端, 請問我 where 部分這樣寫對嗎?可以抓到request值嗎?

    error為"CS0200: 無法指定屬性或索引子 'System.Data.Common.DbDataReader.this[string]' -- 其為唯讀"

    程式碼區塊

    protected void Page_Load(object sender, EventArgs e)
        {
             string Status0, Status1, Status2;
             string strCon = "Data Source=10.xx.xx.xx;Initial Catalog=eFMS.net;User ID=sa;Password=xx ";
            SqlConnection myConn = new SqlConnection(strCon);
            myConn.Open();
            string sql = "select * from car_status where customer_id ='" + Request.QueryString["customer_id"] + "'";
            SqlCommand cmd = new SqlCommand(sql, myConn);
            SqlDataReader reader = cmd.ExecuteReader();
            if (reader.HasRows)
            {
                while (reader.Read())
                {
                    if (reader["status_id"]= 0)
                        Status0 = rs2("status");
                    else if (reader["status_id"]= 1)
                        Status1 = rs2("status");
                    else if (reader["status_id"]= 2)
                        Status2 = rs2("status");
                }
                reader.Close();
                myConn.Close();
            }
            else
            {
                Status0 = "待命";
                Status1 = "休息";
                Status2 = "作業";
            }


       

        }

     

     

     

    你是第一次寫 C# 嗎?

     

    程式碼區塊

            if (reader.HasRows)
            {
                while (reader.Read())
                {
                    if (Convert.ToInt32(reader["status_id"])== 0)
                        Status0 = rs2("status");
                    else if (Convert.ToInt32(reader["status_id"])== 1)
                        Status1 = rs2("status");
                    else if (Convert.ToInt32(reader["status_id"])== 2)
                        Status2 = rs2("status");
                }
                reader.Close();
                myConn.Close();
            }

     

     

    Dienstag, 11. Dezember 2007 09:54
    Moderator
  • ㄟ~但我若放在同檔案中 做Page_Load是可以抓到

    若寫到.cs就不可以?

    請問是為什麼?

     

    是的,因為要用asp.net C#就剛接觸而已!

    請問有好書提供我嗎?

    因為想找到asp.net 和C#結合的書 似乎比較少!都看到是vb.net居多!

    謝謝指教!

     

    Mittwoch, 12. Dezember 2007 05:42
  • 我也不知道為什麼,因為我只看到你的 Page_Load,並不知道你後面還有沒有對 Label1.Text 做什麼處理。

    我自己寫這麼多次也沒看過你的問題。

     

    書是要自己到書店去看,看的下的才是好書,勤跑書店或圖書館翻一翻就對了。

    Mittwoch, 12. Dezember 2007 06:12
    Moderator
  • SQL指令那邊看起來,沒有太大問題

    在後置程式碼Code-Behind,接受別的網頁傳來的字串,並不難。

     

            if (reader.HasRows)
            {
                while (reader.Read())
                {
                    if (reader["status_id"]= 0)
                        Status0 = rs2("status");
                    else if (reader["status_id"]= 1)
                        Status1 = rs2("status");
                    else if (reader["status_id"]= 2)
                        Status2 = rs2("status");
                }
            }
            else
            {
                Status0 = "待命";
                Status1 = "休息";
                Status2 = "作業";
            }

     

    下面這兩行,拿到外面會比較好

                reader.Close();
                myConn.Close();

     

    而且您的 rs2("status")......rs2是什麼?

    Mittwoch, 12. Dezember 2007 07:34
  • label 我只是單純秀出 後面沒有在任何動作,但我試好多次 page_load放在同一檔案 是可以秀出label1內容,但放到.cs 就秀不出資料了。

    程式碼區塊

    protected void Page_Load(object sender, EventArgs e)
        {
            Label1.Text = "客戶名稱:" + Request.QueryString["customer_name"];

        }

     

     

    程式碼區塊

    if (reader.HasRows)
            {
                while (reader.Read())
                {
                      
                    if (reader.GetInt32(1) == 0)
                        Status0 = reader.GetString(2);
                    else if (reader.GetInt32(1) == 1)
                        Status1 = reader.GetString(2);
                    else if (reader.GetInt32(1) == 2)
                        Status2 = reader.GetString(2);
                }
               
            }
            else
            {
                Status0 = "待命";
                Status1 = "休息";
                Status2 = "作業";
            }
            reader.Close();
            myConn.Close();

            DataBind();

     

     

    我在前端 用<%# Status0 %>接是不對的,請問我該如何修正?

    Mittwoch, 12. Dezember 2007 07:42
  • 你把你的 HTML 和程式都貼上來看看。

     

    Mittwoch, 12. Dezember 2007 07:48
    Moderator
  • 程式碼區塊
    <script runat="server">
        protected void Page_Load(object sender, EventArgs e)
        {
            Label1.Text = "客戶名稱:" + Request.QueryString["customer_name"];
        }
    </script>
    <html xmlns="http://www.w3.org/1999/xhtml" >
    <head runat="server">
        <style type="text/css">
        <!--
        body{font-size:10pt}
        -->
        </style>
        <title>詳細資料</title>
    </head>
    <body>
      
        <form id="form1" runat="server">
        <div id="DIV1" runat="server">
            <asp:Label ID="Label1" runat="server" Text="Label" Width="273px" Height="29px"></asp:Label><br />
            &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;&nbsp; &nbsp; &nbsp;
            <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False"
                DataKeyNames="OBU_id" DataSourceID="SqlDataSource1"  AllowSorting="True" CellPadding="4" ForeColor="#333333" GridLines="None" >
                <Columns>
                .........
                </Columns>
                <FooterStyle BackColor="#507CD1" Font-Bold="True" ForeColor="White" />
                <RowStyle BackColor="#EFF3FB" />
                <EditRowStyle BackColor="#2461BF" />
                <SelectedRowStyle BackColor="#D1DDF1" Font-Bold="True" ForeColor="#333333" />
                <PagerStyle BackColor="#2461BF" ForeColor="White" HorizontalAlign="Center" />
                <HeaderStyle BackColor="#507CD1" Font-Bold="True" ForeColor="White" />
                <AlternatingRowStyle BackColor="White" />
            </asp:GridView>
            &nbsp;
            <aspTongue TiedqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:eFMS.netConnectionString3 %>"
                SelectCommand="SELECT ROW_NUMBER() OVER(ORDER BY A.OBU_id) AS 'Row Number', A.OBU_id, A.version, A.car_no, A.IMSI, A.IMEI, B.car_status_id ,B.IP, B.GPS_status, B.Address, B.protect_state, B.burglar_type, B.burglar_time ,B.report_time FROM OBU_profile AS A, monitor_new AS B WHERE (A.OBU_id >=  @customer_id*65536) AND (A.OBU_id < (@customer_id+1)*65536) AND (B.OBU_id >=  @customer_id*65536) AND (B.OBU_id < (@customer_id+1)*65536) AND (A.OBU_id= B.OBU_id)" ProviderName="<%$ ConnectionStrings:eFMS.netConnectionString3.ProviderName %>">
                <SelectParameters>
                    <asp:QueryStringParameter Name="customer_id" QueryStringField="customer_id" />
                    <asp:QueryStringParameter Name="customer_name" QueryStringField="customer_name" />
                </SelectParameters>
            </aspTongue TiedqlDataSource>
        </div>
        </form>
        <asp:Label ID="Label2" runat="server" Text='<%# Status0 %>' Width="109px"></asp:Label>
    </body>
    </html>

     

    程式碼區塊

    public partial class customer_detail : System.Web.UI.Page
    {

     protected void Page_Load(object sender, EventArgs e)
        {
            // Label2.Text = "客戶名稱:" + Request.QueryString["customer_id"];

             string Status0, Status1, Status2;
             string strCon = "Data Source=10.xx.xx.xx;Initial Catalog=eFMS.net;User ID=sa;Password=xx ";
            SqlConnection myConn = new SqlConnection(strCon);
            myConn.Open();
            string sql = "select * from car_status_define where customer_id ='"+ Request.QueryString["customer_id"] +"'";
            SqlCommand cmd = new SqlCommand(sql, myConn);
            SqlDataReader reader = cmd.ExecuteReader();
            if (reader.HasRows)
            {
                while (reader.Read())
                {
                      
                    if (reader.GetInt32(1) == 0)
                        Status0 = reader.GetString(2);
                    else if (reader.GetInt32(1) == 1)
                        Status1 = reader.GetString(2);
                    else if (reader.GetInt32(1) == 2)
                        Status2 = reader.GetString(2);
                }
               
            }
            else
            {
                Status0 = "待命";
                Status1 = "休息";
                Status2 = "作業";
            }
            reader.Close();
            myConn.Close();

            DataBind();
       

        }

    }

     

     

    Mittwoch, 12. Dezember 2007 07:59
  • 我不知道你的傳法是如何。

    應該 URL 要是像這樣才接的到值吧:

    程式碼區塊

    myPage.aspx?customer_id=1192&customer_name=Me

     

     

    我也沒看到你的頁面宣告,有沒有和 CS 綁在一起不得而知,如果沒有綁在一起,沒作用很正常。

     

    至於你的第二個問題,請使用 Label2.Text = Status0 的方式。

    如果你要這樣做,你必須要:

     

    1. 將變數宣告放到 class-level。

    2. 呼叫 Page.DataBind()。

    Mittwoch, 12. Dezember 2007 08:10
    Moderator

  • <%@ Page Language="C#" AutoEventWireup="true" CodeFile="customer_detail.aspx.cs" Inherits="customer_detail"%>

    程式碼區塊
     <asp:HyperLinkField DataNavigateUrlFields="customer_id,customer_name" DataNavigateUrlFormatString="customer_detail.aspx?customer_id={0}&amp;customer_name={1}"
                        DataTextField="customer_name" Target="_self" HeaderText="客戶名稱" />

     

     

     

    Mittwoch, 12. Dezember 2007 08:22
  • 你檢查一下 URL 的格式是否正確吧。

    到目前看來好像沒看到有什麼問題。

     

    我自己是都不用 HyperLinkField ...。

     

    Mittwoch, 12. Dezember 2007 08:38
    Moderator