ASP.NET&C#学習メモ1(伝言機能)

14530 ワード

ここでは主に、フロントでデータをバインドする遊び方と、基本的にデータベースに接続する方法(後でブログシステムでADO.NETデータの操作を詳しく記録する)とRepeaterコントロールの遊び方を説明しますので、ソフトウェアエンジニアリングの流れに従って書かない(ソフトウェアエンジニアリングの流れに従った項目も後で書かれる).
伝言簿の機能:
1ユーザーメッセージ
2ユーザメッセージ表示
3管理者メッセージ処理(削除と返信メッセージ)
データベースの作成
USE [Guid]
GO

CREATE TABLE [dbo].[tb](
	[ID] [int] IDENTITY(1,1) NOT NULL,
	[UserName] [varchar](50) COLLATE Chinese_PRC_CI_AS NULL,
	[PostTime] [datetime] NULL,
	[Message] [varchar](50) COLLATE Chinese_PRC_CI_AS NULL,
	[IsReplied] [bit] NULL,
	[Reply] [varchar](40) COLLATE Chinese_PRC_CI_AS NULL,
PRIMARY KEY CLUSTERED 
(
	[ID] ASC
)WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]

GO
SET ANSI_PADDING OFF

二新しいwebsiteサイト
1ユーザー伝言機能を実現する:Default.aspxユーザー名とパスワードのコントロールを追加し、メッセージを送信するボタン
  
这里控件的名字尽量要有意义,增强代码的可读性,比如 textbox1命名为“txtName”。

这时就要添加点击button的事件,在Default.aspx.cs:

 protected void btnSubmitMsg_Click(object sender, EventArgs e)
    {
        string conn = System.Configuration.ConfigurationManager.ConnectionStrings["GuidConnectionString"].ToString();        
        SqlConnection sqlCon = new SqlConnection(conn);
        string sqlStr = @"insert into tb (UserName,PostTime,Message,IsReplied,Reply) values('" + this.txtName.Text + "','" + System.DateTime.Now + "','" + this.txtMessage.Text + "',0,'')";
        //   @,   \    \\,\     , @     
        SqlCommand sqlCmd = new SqlCommand(sqlStr, sqlCon);
        sqlCon.Open();
        int i = sqlCmd.ExecuteNonQuery();
        sqlCon.Close();
        if (i > 0)
            Response.Write("alert('succeed')");
        else
            Response.Write("there are some errors");
        BindData();


    }

データベース操作、データベース操作の基本手順について説明します.
1)データベース接続文字列の取得
2)データベース接続の確立
3)実行するSql文を確立する
4)Sql文を実行する接続を開く
5)Sql文の実行
6)接続をクローズし,メッセージを返すものもあれば,返さなくてもよいものもある.
これでユーザーからのメッセージがOK
2ユーザメッセージ表示
ここでは、データソースコントロールであるrepeaterを使用します.repeaterコントロールをaspxページにドラッグすると、aspxソースページで自分でコードを打つほうが便利です.ASPの勉強を始めたばかりです.NETの时はドラッグコントロールが便利だと思っていましたが、今はソースコードの中で直接コードを叩くのが好きです.ドラッグコントロールの设定属性は属性ボックスの中で探す必要があるので、自分が必要な属性はどの属性を叩くのが速いです.
repeaterコントロールは、その名の通り「繰り返し」です.つまり、構造フォーマットを書くだけで、データをバインドした後、データはこの構造に従って表示されます.
repeaterには5つのtempleがあり、ここではItemTempleしか使われていません.また、repeaterコントロールの内容はコードしか打てません.repeaterはDefaultです.aspxページCode:
  
        <
        
            
-


フロントバインドデータ:
データをバインドする以上、バックグラウンドDBからデータが転送されます.バックグラウンドでデータをバインドする方法を見てみましょう.
 
  
  public void BindData()
    {
        string conn = System.Configuration.ConfigurationManager.ConnectionStrings["GuidConnectionString"].ToString();
        SqlConnection sqlCon = new SqlConnection(conn);
        string sqlStr = "select * from tb";
        SqlDataAdapter sda = new SqlDataAdapter(sqlStr, sqlCon);
        DataSet ds = new DataSet();
        sda.Fill(ds, "tb");
        rptShowMsg.DataSource = ds.Tables["tb"];
        rptShowMsg.DataBind();
    }
      DataAdapter,DataSet,DataTable.ADO.NET      。 
   
  

DataSet ,DataTable ,DataAdapter “ ” , “ ”

1 )

2 )

3 ) Sql

4 ) Adapter, SqlCommand。

5 ) Dataset,

6) Adapter dataset

7) ( repeater,ID="rptShowMsg") 。

* dataset , “ ” 。

, , , 。

BindData() page_load() , button 。 :

using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Data.SqlClient;
using System.Data.Sql;
using System.Data.SqlTypes;

public partial class _Default : System.Web.UI.Page 
{
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            BindData();
        }
    }
    protected void btnSubmitMsg_Click(object sender, EventArgs e)
    {
        string conn = System.Configuration.ConfigurationManager.ConnectionStrings["GuidConnectionString"].ToString();        
        SqlConnection sqlCon = new SqlConnection(conn);
        string sqlStr = @"insert into tb (UserName,PostTime,Message,IsReplied,Reply) values('" + this.txtName.Text + "','" + System.DateTime.Now + "','" + this.txtMessage.Text + "',0,'')";
        //   @,   \    \\,\     , @     
        SqlCommand sqlCmd = new SqlCommand(sqlStr, sqlCon);
        sqlCon.Open();
        int i = sqlCmd.ExecuteNonQuery();
        sqlCon.Close();
        if (i > 0)
            Response.Write("alert('succeed')");
        else
            Response.Write("there are some errors");
        BindData();

    }
    public void BindData()
    {
        string conn = System.Configuration.ConfigurationManager.ConnectionStrings["GuidConnectionString"].ToString();
        SqlConnection sqlCon = new SqlConnection(conn);
        string sqlStr = "select * from tb";
        SqlDataAdapter sda = new SqlDataAdapter(sqlStr, sqlCon);
        DataSet ds = new DataSet();
        sda.Fill(ds, "tb");
        rptShowMsg.DataSource = ds.Tables["tb"];
        rptShowMsg.DataBind();
    }

}







        


    
3 ( )

username=admin password=admin , 。 Query DB 。
, Panel , 。

adminLogin.aspx :







        


    
AdminName:

Password :



repeater 2 : 、 。 2 Button repeater , button repeater
repeater : OnItemCommand="Repeater1_ItemCommand"。 repeater , repeater 。

“Delete”, “Update”, Where ,

ID , : : CommandName="deleteMsg"   :CommandArgument=''

“ ” : , , 。

: BindData() , ID,

 


CommandArgument=''

, Eval 。
: , ID, , DB【 :Text='', , , adminLogin.aspx , default , default Reply-Eval("Reply") %>】

adminLogin.aspx.cs :

using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Data.Sql;
using System.Data.SqlClient;
using System.Data.SqlTypes;


public partial class adminLogin : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
       // BindData();
    }
    protected void btnLogin_Click(object sender, EventArgs e)
    {
        if ((this.txtName.Text == "admin") && (this.txtpwd.Text == "admin"))
        {
            BindData();
            this.Panel1.Visible = true;
        }
    }
    protected void Repeater1_ItemCommand(object source, RepeaterCommandEventArgs e)
    {
        string conn = System.Configuration.ConfigurationManager.ConnectionStrings["GuidConnectionString"].ToString();
        SqlConnection sqlCon = new SqlConnection(conn);
        if (e.CommandName == "deleteMsg")
        {
            string sqlStr = "delete from tb where ID="+ e.CommandArgument+"";
            SqlCommand cmd = new SqlCommand(sqlStr, sqlCon);
            sqlCon.Open();
            int i=cmd.ExecuteNonQuery();
            sqlCon.Close();
            if (i > 0)
                Response.Write("alert('succeed!')");
            else
                Response.Write("alert('failed')");
            BindData();
        }
        if (e.CommandName == "sendReply")
        {
            string strSql="update tb set IsReplied=1 ,Reply='"+((TextBox)e.Item.FindControl("txtReply")).Text+"'where ID="+e.CommandArgument+"";
            sqlCon.Open();
            SqlCommand cmd = new SqlCommand(strSql, sqlCon);
            int i = cmd.ExecuteNonQuery();
            sqlCon.Close();
            if (i > 0)
                Response.Write("alert('succeed!')");
            else
                Response.Write("alert('failed')");
            BindData();
        }
    }
    public void BindData()
    {
        string conn = System.Configuration.ConfigurationManager.ConnectionStrings["GuidConnectionString"].ToString();
        SqlConnection sqlCon = new SqlConnection(conn);
        string sqlStr = "select * from tb order by PostTime DESC";
        SqlDataAdapter sda = new SqlDataAdapter(sqlStr, sqlCon);
        DataSet ds = new DataSet();
        sda.Fill(ds, "tb");
        Repeater1.DataSource = ds.Tables["tb"];
        Repeater1.DataBind();
    }
}
 
   
   
  


e.CommandName == "sendReply"// repeater "sendRely",
Reply='"+((TextBox)e.Item.FindControl("txtReply")).Text// repeater TextBox, TextBox ID="txtReply" , Text