【问题标题】:Trying to insert values into database from ASP.NET page [closed]尝试从 ASP.NET 页面将值插入数据库[关闭]
【发布时间】:2015-05-03 20:49:41
【问题描述】:

我说得很清楚,我正在尝试通过 C# 将值插入数据库,但它无法使用我拥有的代码。无需搁置我的问题。我以为这可能是一个初学者可以寻求帮助的地方,而不是被人看不起!!!

我正在尝试通过 asp.net 和 C# 将值插入数据库。我有一个结合了文本框和单选按钮的基本调查表。当我运行代码来插入值时,单选按钮值会被很好地插入。我在使用文本框值时遇到问题。

ASP.NET 标记:

Date of Flight&nbsp;<asp:TextBox ID="flightdate" runat="server" /><br />
Time of Flight&nbsp;<asp:TextBox ID="flightTime" runat="server" /><br />
Flight Number&nbsp;<asp:TextBox ID="flightNum" runat="server" /><br />
Flight Destination&nbsp;<asp:TextBox ID="flightDest" runat="server" /><br />

<strong>Friendliness of customer staff: </strong>
<asp:RadioButtonList ID="question1" runat="server">
<asp:ListItem Value="No Opinion"                                                                    Selected="True">No Opinion</asp:ListItem>
<asp:ListItem Value="Poor">Poor</asp:ListItem>
<asp:ListItem Value="Fair">Fair</asp:ListItem>
<asp:ListItem Value="Good">Good</asp:ListItem>
<asp:ListItem Value="Excellent">Excellent</asp:ListItem>
</asp:RadioButtonList>

以及背后的 C# 代码:

  string flightDate = Request.QueryString["flightDate"];
  string flightTime = Request.QueryString["flightTime"];
  string flightNum = Request.QueryString["flightNum"];
  string flightDest = Request.QueryString["flightDest"];
  string selectedFriend = "";
  string selectedSpace = "";
  string selectedComfort = "";
  string selectedCleanliness = "";
  string selectedNoise = "";

  for (int i = 0; i < question1.Items.Count; ++i)
  {
      if (question1.Items[i].Selected)
      {
               selectedFriend = question1.Items[i].Value;
      }
  }

  SqlConnection dbConnection = new SqlConnection("Data Source=IDEA-PC\\SQLEXPRESS; Integrated Security=True");

  try
  {
      dbConnection.Open();
      dbConnection.ChangeDatabase("airlineSurvey");

      string results = "INSERT INTO results(flightDate, flightTime, flightNumber, flightDestination, friendliness) " + "VALUES('" + flightDate + "', '" + flightTime + "', '" + flightNum + "', '" + flightDest + "', '" + selectedFriend + "')";

      SqlCommand sqlCommand = new SqlCommand(results, dbConnection);
      sqlCommand.ExecuteNonQuery();

      regMessage.Text = "<p>Thank you for your feedback!</p>";
  }
  catch (SqlException exception)
  {
      Response.Write("<p>Error code " + exception.Number + ": " + exception.Message + "</p>");
    }

    dbConnection.Close();
}

【问题讨论】:

  • SQL Injection alert - 您应该将您的 SQL 语句连接在一起 - 使用 参数化查询 来避免 SQL 注入
  • 文本框发生了什么?您并没有真正说出问题所在。
  • 初学者可以在这里找到帮助,但他们应该先阅读How to Ask,然后再提出将被搁置的糟糕问题(直到您更正问题)。然后可以重新提出问题。您从未说过您在使用文本框时遇到了什么“问题”。请注意,即使您没有提出好的问题,您也得到了很好的答案。
  • 我说谢谢

标签: c# asp.net sql-server


【解决方案1】:

您应该通过 Text 属性访问 TextBoxes 的值:

string flightDate = flightDate.Text;
string flightTime = flightTime.Text;
string flightNum = flightNum.Text;
string flightDest = flightDest.Text;

但仍有改进的余地: 对于日期,您应该使用日历控件,对于目标字段,最好从 ComboBox 控件等中选择。

【讨论】:

    【解决方案2】:

    您得到空值的原因是您应该使用Request.Form 而不是Request.QueryString

    但是,由于您的文本框已经是服务器端控件, 那么你甚至不需要使用Request.Form,因为你可以简单地使用:

    var flightDate = this.flightdate.Text;
    var flightTime = this.flightTime.Text;
    var flightNum = this.flightNum.Text;
    var flightDest = this.flightDest.Text;
    

    此外,您构建SQL 查询的方式非常糟糕 - 您正在启用 SQL 注入。

    请看一下:https://stackoverflow.com/a/9162904/461810

    【讨论】:

    • 这行得通,谢谢。我意识到编码不安全。我只是在学习 C# 的开始阶段
    【解决方案3】:

    这个效果最好:

    var flightDate = this.flightdate.Text;
    var flightTime = this.flightTime.Text;
    var flightNum = this.flightNum.Text;
    var flightDest = this.flightDest.Text;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多