1

私の経験と私が使用しているもの

そのため、SQL ServerManagementStudiosとVisualStudios2010にもう少し慣れるために、ASP.NETの非常に基本的なWebアプリケーションから始めています。通常、MySQL、PHP、およびSublime TextEditor2を使用しています。 C#およびVisualStudioでのデータベースの実装についてはあまり経験がありません。そのため、SQL Server Management Studioのストアドプロシージャを使用して、VisualStudios2010に実装しようとしています。

問題

ここに私の問題があります。SQLServerにリンクし、データベースからすべてのレコードを追加、削除、検索、および表示できる基本的なWebページを作成しようとしています。これで、追加/削除が正しいと思ったものに基づいて独自のコードを作成しましたが、ボタンをクリックしても何も起こりません。ですから、私の欲求不満がどこから来ているのかがわかると思います。問題がC#コーディングにあるのかSQLコーディングにあるのかわかりません。

追加/削除ボタンを機能させることに焦点を当ててから、すべてのファイルを表示するロジックを理解したいと思います。ボタンをクリックして、グリッドを表示するだけでなく、すべてのファイルを表示できるようにしたいと思います。私のデータベースはFirstAppと呼ばれています。

これが私のweb.configファイルの内容です:

<add name="FirstApp" connectionString="Data Source=PCNAME\SQLEXPRESS;Initial Catalog=FirstApp;Integrated Security=True"
  providerName="System.Data.SqlClient" />

これが私のDefault.aspx.csファイルの内容です。

*今すぐコードを修正してください!*

  namespace FirstApp
  {
  public partial class _Default : System.Web.UI.Page
  {
  public string CommandArgument { get; set; }
    protected void Page_Load(object sender, EventArgs e)
    {

    }

    private void MessageBox(string msg)
    {
        Label lbl = new Label();
        lbl.Text = "<script language='javascript'>" + Environment.NewLine +  "window.alert('" + msg + "')</script>";
        Page.Controls.Add(lbl);
    }

    //Add a new company to the database
    protected void add_Click(object sender, EventArgs e)
    {
        SqlDataReader rdr = null;
        string connectionString = null;
        SqlConnection cnn;
        connectionString = "Data Source=ITXDK29M91\\SQLEXPRESS;Initial Catalog=FirstApp;Integrated Security=True";
        cnn = new SqlConnection(connectionString);
        try
        {
            cnn.Open();
            SqlCommand cmd = new SqlCommand("dbo.Add_Company", cnn);
            cmd.CommandType = CommandType.StoredProcedure;
            cmd.Parameters.AddWithValue("@companyname", companyname.Text);
            cmd.Parameters.AddWithValue("@companyphone", companyphone.Text);
            cmd.Parameters.AddWithValue("@companyid", companyid.Text);
            cmd.Parameters.AddWithValue("@companytype", companytype.Text);
            rdr = cmd.ExecuteReader();
         }
        finally
        {

            //Close the connections 
            if (cnn != null)
            {
                cnn.Close();
            }
            if (rdr != null)
            {
                rdr.Close();
            }
        }
     }

     //Delete a company from the database
     protected void delete_Click(object sender, EventArgs e)
     {
         SqlDataReader rdr = null;
        SqlConnection cnn;
        string connectionString = null;
        connectionString = "Data Source=ITXDK29M91\\SQLEXPRESS;Initial Catalog=FirstApp;Integrated Security=True";
        cnn = new SqlConnection(connectionString);
        try
        {
            cnn.Open();
            SqlCommand cmd = new SqlCommand("dbo.deleteCo", cnn);
            cmd.CommandType = CommandType.StoredProcedure;
            cmd.Parameters.AddWithValue("@ID", SqlDbType.Int);
            rdr = cmd.ExecuteReader();

        }

        finally
        {

            //Close the connections 
            if (cnn != null)
            {
                cnn.Close();
            }
            if (rdr != null)
            {
                rdr.Close();
            }
        }
    }


    protected void Search_Click(object sender, EventArgs e)
    {

    }

    protected void Getall_Click(object sender, EventArgs e)
    {

    }

  }
  }

これはDefault.aspxの私のソースコードにあるものです

 <asp:Content ID="BodyContent" runat="server" ContentPlaceHolderID="MainContent">      <h2>Ready for an Adventure? Let&#39;s get started! 
     </h2> <hr />This is where you can enter information about your company. 
 <br />
 <form method="post" action="">
Company Name:<br /> 
<asp:TextBox ID="companyname" runat="server"></asp:TextBox>
<br />
Company Phone Number:<br />
<asp:TextBox ID="companyphone" runat="server"></asp:TextBox>
<br />
Company Tax ID Number:
<br />
<asp:TextBox ID="companyid" runat="server"></asp:TextBox>
<br />
Type of business: <br />
     <asp:TextBox ID="companytype" runat="server"></asp:TextBox>
<br />
 <asp:Button ID="add" runat="server" BackColor="DeepSkyBlue" 
BorderColor="Black" BorderStyle="Solid" BorderWidth="1px" 
CssClass="submitButton" Font-Names="Palatino Linotype" ForeColor="White" 
onclick="add_Click" Text="Submit" Width="128px" />
</form> <hr /> 
Want to delete your company information?<br />
Enter in the Company ID Number:&nbsp;
<br />
 <asp:TextBox ID="PrimaryKey" runat="server" Width="120px"></asp:TextBox>
 <br />
 <asp:Button ID="delete" runat="server" BackColor="DeepSkyBlue" 
BorderColor="Black" BorderStyle="Solid" BorderWidth="1px" 
CssClass="submitButton" Font-Names="Palatino Linotype" ForeColor="White" 
onclick="delete_Click" Text="Delete Info" Width="119px" />
<br />
<hr /> 
Looking for similar companies?
<br />
(Ex: Retail, Designer, Restaurant, etc.) &nbsp;
<br />
Enter the type of company:
 <br />
 <asp:TextBox ID="scompanyid" runat="server" Width="120px"></asp:TextBox>
 <br />
 <asp:Button ID="Search" runat="server" BackColor="DeepSkyBlue" 
 BorderColor="Black" BorderStyle="Solid" BorderWidth="1px" 
 CssClass="submitButton" Font-Names="Palatino Linotype" ForeColor="White" 
 onclick="Search_Click" Text="Start Searching!" Width="119px" />
 <br />
 <hr /> 
   Want to see all the companies that we work with? <br /> 
   Click the button below! 
 <br />
 <asp:Button ID="Getall" runat="server" BackColor="DeepSkyBlue" 
 BorderColor="Black" BorderStyle="Solid" BorderWidth="1px" 
 CssClass="submitButton" Font-Names="Palatino Linotype" ForeColor="White" 
 onclick="Getall_Click" Text="Get all records!" Width="119px" />
 <br />
   <br />
   </asp:Content>

更新:正しいコードを表示するようにコードを更新しました。追加ボタンは機能しますが、削除ボタンは機能しません。私はまだそれを理解しようとしています。

4

3 に答える 3

6

実際に接続を開いたり、SQL コマンドを実行したりするわけではありません。通常、単純なコマンドを実行する方法は次のとおりです。

using (var conn = new SqlConnection(connectionString))
{
    using (var comm = conn.CreateCommand())
    {
        conn.Open();
        comm.CommandText = "SOME SQL HERE";

        // command type, parameters, etc.

        //pick one of the following
        comm.ExecuteNonQuery();
        int value = (int)comm.ExecuteScalar();
        SqlDataReader reader = comm.ExecuteReader();

    }
}
于 2013-03-06T22:16:58.913 に答える
4

実際にコマンドを実行する必要があります。実行には 4 つのタイプがあります (クエリ ステートメントから期待される結果のタイプによって異なります)。

  • ExecuteReader - 返される行と列 (通常の選択クエリなど)
  • ExecuteNonquery - 結果は期待されません。(例: レコードの削除)
  • ExecuteScalar - 単一値 (Count、Max など)
  • ExecuteXMLReader - XML 用

追加用のこのようなもの

cmd.ExecuteNonquery();

ただし、コマンドの実行について心配する前でも、コマンドを実行するための開いている接続が常に必要であり、コマンドをそれにリンクする必要があります。

SqlConnection cn = new SqlConnection(connStr);
cn.Command = cmd;
cn.Open();
<your command/parameter code here>
cmd.ExecuteNonquery();

そして、元の状態に戻すことを忘れないでください。

cmd.Close();
cn.Close();

電話番号を varchar にするなど、数値として算術演算を行うつもりはないため、他にも提案がありますが、これは今ここでの本当の質問ではありません。

幸運をお祈りしています!

参考までに: サイド トピック: コマンドを使用して結果を返すようになると、ExecuteReader で実行されるコマンドは SqlDataReader オブジェクトを作成して返すため、SqlDataReaders に "new" は必要ありません。これは、これを行うことができることを意味します

//This next line not needed
//dr = new SqlDataReader()   
SqlDataReader dr = cmd.ExecuteReader();
于 2013-03-06T22:55:51.763 に答える
0

SQL ステートメントを実行していないようです。以下を実行するメソッドを作成してから、削除ボタンのクリックイベントからそのメソッドを呼び出してください。

    public static void DeleteSomething()
    {
        using (var conn = new SqlConnection(connectionString))
        {
            using (SqlCommand cmd = new SqlCommand("usp_proc_delete", conn.CreateCommand()))
            {
                 conn.Open()
                 cmd.CommandType = CommandType.StoredProcedure;
                 cmd.Parameters.AddWithValue("@PrimaryKey", SqlDbType.Int);
                 cmd.ExecuteNonQuery();
            }
        }
    }
于 2013-03-06T22:28:19.683 に答える