1

我的经验和我正在使用的东西

所以我刚开始使用 ASP.NET 中的一个非常基本的 Web 应用程序,以便更熟悉 SQL Server Management Studios 和 Visual Studios 2010。通常,我使用 MySQL、PHP 和 Sublime Text Editor 2。我是对 C# 和在 Visual Studios 中实现数据库不是很有经验。所以我正在尝试使用 SQL Server Management Studios 中的存储过程并在 Visual Studios 2010 中实现它。

问题

所以这是我的问题:我正在尝试创建一个链接到 SQL Server 的基本网页,并能够添加、删除、搜索和显示数据库中的所有记录。现在我已经根据我认为正确的添加/删除代码编写了自己的代码,当我单击按钮时没有任何反应。所以我相信你可以看到我的挫败感来自哪里。我不确定问题出在我的 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

您需要实际执行该命令。有四种执行类型(取决于您期望从查询语句中获得的结果类型)

  • 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,因为你不会将其作为数字进行算术——但这不是你现在真正的问题。

最良好的祝愿!

仅供参考:附带主题:每当您开始使用命令返回结果时,您的 SqlDataReader 都不需要“新”,因为使用 ExecuteReader 执行的命令会创建并返回一个 SqlDataReader 对象。这意味着你可以这样做

//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 回答