【发布时间】:2011-04-19 17:29:54
【问题描述】:
我有一个供用户输入数据的提交页面。然后我重定向到一个查看页面,这样他们就可以查看他们的输入。会话结束,因为这将是一个大容量站点,但我在提交命令的末尾使用了范围标识方法。如何查询范围 ID 值,以便在我的视图页面中显示行数据?
代码如下:这是一个培训项目,为了简单起见,我被明确禁止参数化。但是,是的,我知道参数化是要走的路。
protected void Button1_Click(object sender, EventArgs e)
{
string connectionString = System.Configuration.ConfigurationManager.ConnectionStrings["MyConnectionString"].ConnectionString;
String thisQuery = "INSERT INTO ProductInstance (CustId, CustName, SicNaic, CustAdd, CustCity, CustState, CustZip, BroId, BroName, BroAdd, BroCity, BroState, BroZip, EntityType, Coverage, CurrentCoverage, PrimEx, Retention, EffectiveDate, Commission, Premium, Comments) VALUES ('" + TextBox19.Text + "', '" + TextBox1.Text + "', '" + RadioButtonList1.SelectedItem + "', '" + TextBox2.Text + "', '" + TextBox3.Text + "', '" + DropDownList1.SelectedItem + "', '" + TextBox4.Text + "', '" + TextBox18.Text + "', '" + TextBox5.Text + "', '" + TextBox6.Text + "', '" + TextBox7.Text + "', '" + DropDownList2.SelectedItem + "', '" + TextBox8.Text + "', '" + DropDownList3.SelectedItem + "','" + TextBox9.Text + "','" + TextBox10.Text + "','" + TextBox11.Text + "','" + TextBox12.Text + "','" + TextBox20.Text + "','" + TextBox14.Text + "','" + TextBox15.Text + "','" + TextBox16.Text + "'); SELECT SCOPE_IDENTITY() AS [lastInsertedProductId]";
using (SqlConnection sqlConn = new SqlConnection(connectionString))
{
sqlConn.Open();
using (SqlCommand command = new SqlCommand(thisQuery, sqlConn))
{
int lastInsertedProductId = Convert.ToInt32(command.ExecuteScalar());
}
}
Response.Redirect("~/View.aspx");
然后查看页面代码在这里:
protected void Page_Load(object sender, EventArgs e)
{
string x = Request.QueryString["ProductId"];
string connectionString = System.Configuration.ConfigurationManager.ConnectionStrings["MyConnectionString"].ConnectionString;
string editQuery = "SELECT CustId, CustName, SicNaic, CustCity, CustAdd, CustState, CustZip, BroName, BroId, BroAdd, BroCity, BroState, BroZip, EntityType, Coverage, CurrentCoverage, PrimEx, Retention, EffectiveDate, Commission, Premium, Comments FROM ProductInstance WHERE ProductId =" + x;
using (SqlConnection editConn = new SqlConnection(connectionString))
{
editConn.Open();
using (SqlCommand command = new SqlCommand(editQuery, editConn))
{
SqlDataReader dr = command.ExecuteReader();
dr.Read();
Label6.Text = dr.GetInt32(0).ToString();
【问题讨论】:
-
哈哈哈是的,是的,我已经阅读了这篇文章,并且在我的所有问题中都提到了它或类似的东西。该站点不适用于实际部署,正如我在问题中提到的,我的培训师明确禁止我进行参数化,因为他希望我在完成这个项目的同时专注于理解基础知识。不过,我真的很感激每个人都跳出来指出这一点。它显示了真正的善意。
-
您应该考虑查看 ORM,例如 EF 或 NHibernate。
-
我无法理解“为简单起见禁止参数化”和“这将是一个高容量站点”。如果您的培训师实际上试图提供好的建议,但 BASIC 的安全性和性能却被忽略了,并且将演示者的担忧和数据访问混为一谈,那么恐怕您将不得不在其他地方获得知识。如果有使用字符串连接的实际原因,那么您必须至少删除用户输入字符串
标签: c# asp.net sql-server visual-studio