-1

对编码非常陌生,我基本上是在尝试创建一个将在网格中显示数据的 asp 网站,我工作得很好(足够简单)但是我希望能够添加它

我有一个 default.aspx 用于显示我的数据,还有一个 Add.aspx 是我的插入页面。

我有 4 个文本框,用于在其中输入数据,按下按钮会将数据插入到我正在运行的 sql express db 中,

我正在运行,1 个 DB 和 1 个表,所以你可以理解我的小项目是多么简单。

我运行了调试,我没有遇到任何问题:

default.aspx 的代码

</title>
</head>
<body>
    <strong style="border-style: ridge">:: Server List Details Page ::</strong>
<p></p>


    <form id="form1" runat="server">
    <div>
    </div>

            <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" 
        DataSourceID="SqlDataSource1" AllowSorting="True">
                <Columns>
                    <asp:BoundField DataField="ServerName" HeaderText="ServerName" 
                        SortExpression="ServerName" />
                    <asp:BoundField DataField="IPAddress" HeaderText="IPAddress" 
                        SortExpression="IPAddress" />
                    <asp:BoundField DataField="Description" HeaderText="Description" 
                        SortExpression="Description" />
                    <asp:BoundField DataField="Location" HeaderText="Location" 
                        SortExpression="Location" />
                </Columns>
            </asp:GridView>
            <asp:Button ID="Add" runat="server" Text="Add Device" OnClick="Add_click" OnClientClick="window.open('add.aspx', 'add');"/>

    <asp:SqlDataSource ID="SqlDataSource1" runat="server" 
        ConnectionString="<%$ ConnectionStrings:ConnectionString %>" 

        SelectCommand="SELECT [ServerName], [IPAddress], [Description], [Location] FROM [Table1]">
    </asp:SqlDataSource>
    </form>


</body>
</html>

ADD.aspx 的代码

    <title></title>
    </head>
<body>
    <form id="form1" runat="server">
    <strong>:: Add Device Details ::
    <br />
    <br />
    <br />
    </strong>

    Server Name:
    <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
    <br />
    IP Address:&nbsp;&nbsp;&nbsp; 
    <asp:TextBox ID="TextBox2" runat="server"></asp:TextBox>
    <br />
    Description:&nbsp;&nbsp;&nbsp;
    <asp:TextBox ID="TextBox3" runat="server"></asp:TextBox>
    <br />
    Location:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
    <asp:TextBox ID="TextBox4" runat="server"></asp:TextBox>
    <br />
    <br />
    <asp:Button ID="Generate_Data" runat="server" Text="Generate Data" 
        onclick="Generate_Data_Click" PostBackUrl="~/Default.aspx" />
    </form>





</body>
</html>

Button提交信息的代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data.SqlClient;


namespace Table_to_DB
{
    public partial class WebForm2 : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {

        }

        protected void Generate_Data_Click(object sender, EventArgs e)
        {
            SqlConnection cn = new SqlConnection("Data Source= 172.17.10.89; initial catalog=database1");

            SqlCommand cmd = new SqlCommand("INSERT INTO database1 (" + " servername, ipaddress, description, Location " + ") VALUES (" + " @TextBox1.text, @TextBox2.text, @TextBox3.text, @TextBox4.text" + ")", cn);

            cn.Open();
            cmd.ExecuteNonQuery();
            cn.Close();

        }
    }
}

我遇到的问题是,当我输入数据并提交时,表格中没有任何错误和数据。

请帮忙,我从网上下载了大部分代码,我还在学习。

4

1 回答 1

2

您的命令文本是错误的。将参数传递给 SqlCommand 应该是这样

string cmdText = "INSERT INTO table1 (servername, ipaddress, description, Location) " + 
                 "VALUES (@p1, @p2, @p3, @p4)";
string conString = "Data Source= 172.17.10.89; initial catalog=database1";

using(SqlConnection cn = new SqlConnection(conString))
using(SqlCommand cmd = new SqlCommand(cmdText, cn))
{
    cn.Open();
    cmd.Parameters.AddWithValue("@p1",TextBox1.Text);
    cmd.Parameters.AddWithValue("@p2",TextBox2.Text);
    cmd.Parameters.AddWithValue("@p3",TextBox3.Text);
    cmd.Parameters.AddWithValue("@p4",TextBox4.Text);
    int recordsAdded = cmd.ExecuteNonQuery();
}

您不能将文本框的属性文本直接传递到命令文本中。
在这里,您设置了一些占位符(我通常称为 @p1 等,但您可以更改为您喜欢的更精确的名称),然后为每个占位符准备 SqlCommand 设置的参数集合,您要存储的值在数据库中。
此外,我还建议为您的文本框提供更有意义的名称。

并始终使用参数。不要使用字符串连接。它可能看起来更快,但它是通往地狱的道路

于 2013-07-10T13:18:28.683 回答