如何从SQL Server 2005中检索asp.net表单中的值

时间:2011-05-03 07:35:27

标签: c# asp.net sql-server-2005

我希望用户输入的值再次显示在表单中..我的值被输入到SQL Server数据库中,但我不知道如何在表单中再次检索值..我的代码是:< / p>

SqlDataReader rdr = null;
SqlConnection conn = new SqlConnection("Data Source=Si-6\\SQLSERVER2005;Initial Catalog=emp;Integrated Security=SSPI");

try
{
   conn.Open();

   SqlCommand cmd=new SqlCommand ("insert into timeday(project,iteration,activity,description,status,hour)values('"+this .name1 .SelectedValue +"','"+this .iteration .SelectedValue +"','"+this .activity .SelectedValue +"','"+this.name2.Text+"','"+this.status .SelectedValue +"','"+this .Text1 .Text +"')",conn );

   rdr = cmd.ExecuteReader();

   while (rdr.Read())
   {
      Console.WriteLine(rdr[0]);
   }
}
finally
{
   if (rdr != null)
      rdr.Close();

   if (conn != null)
      conn.Close();
}

2 个答案:

答案 0 :(得分:0)

你应该:

  • 避免SQL注入,不要只是将SQL语句连接在一起!改为使用参数化查询
  • 将您的SqlConnectionSqlCommand个对象放入使用块
  • 如果您要拨打INSERT语句,请务必在.ExecuteReader() 致电SqlCommand - 使用.ExecuteNonQuery()代替...

尝试这样的事情:

string connStr = "Data Source=Silverage-6\\SQLSERVER2005;Initial Catalog=emp;Integrated Security=SSPI";

string queryStmt = 
   "INSERT INTO dbo.timeday(project, iteration, activity, description, status, hour) " + 
   "VALUES(@Project, @Iteration, @Activity, @Description, @Status, @Hour)";

using(SqlConnection conn = new SqlConnection())
using(SqlCommand _cmd = new SqlCommand(queryStmt, conn))
{
   _cmd.Parameters.Add("@Project", SqlDbType.VarChar, 100);
   _cmd.Parameters["@Project"].Value = this.name1.SelectedValue.Trim();

   // add other parameters the same way....

   conn.Open();
   int result = _cmd.ExecuteNonQuery();
   conn.Close();
}

如果你这样做会更好:

  • 将从配置文件中集中检索一次连接字符串,然后将其传递给此方法
  • 将从您的UI代码中的Web UI检索要设置的值,然后在业务逻辑对象上调用此业务方法并传入您已确定的值

现在,您正在疯狂地混合UI代码(从下拉列表和文本框中检索值)与数据库/业务逻辑代码 - 这不是一个非常可靠的设计......

更新:如果您想要检索值并显示它们,可以使用以下内容:

public DataTable GetDataForProject(string projectName)
{
   string connStr = "Data Source=Silverage-6\\SQLSERVER2005;Initial Catalog=emp;Integrated Security=SSPI";

   string queryStmt = 
      "SELECT project, iteration, activity, description, status, hour " + 
      "FROM dbo.timeday " + 
      "WHERE project = @project";

   DataTable resultTable = new DataTable();

   using(SqlConnection conn = new SqlConnection())
   using(SqlCommand _cmd = new SqlCommand(queryStmt, conn))
   {
      _cmd.Parameters.Add("@Project", SqlDbType.VarChar, 100);
      _cmd.Parameters["@Project"].Value = projectName;

      SqlDataAdapter dap = new SqlDataAdapter(_cmd);
      dap.Fill(resultTable);
   }

   return resultTable;
}

当然:

  • 您可能希望根据其他条件进行选择(会出现在WHERE条款中)
  • 也许你想使用SqlDataReader并将该数据读入域对象(而不是DataTable

但基本设置 - 具有特定方法,传入标准,使用SqlConnectionSqlCommand使用块读取数据 - 将保持不变。

获得DataTable后,可以将其绑定到ASP.NET网格视图:

DataTable projectData = GetDataForProject("MyProject");

gridView1.DataSource = projectData;
gridView1.DataBind();

答案 1 :(得分:0)

插入后,您需要编写一个查询来检索记录。 写这个


SqlDataReader rdr = null;
SqlConnection conn = new SqlConnection("Data Source=Silverage-6\\SQLSERVER2005;Initial Catalog=emp;Integrated Security=SSPI");

try
{
   conn.Open();

   SqlCommand cmd=new SqlCommand ();
   cmd.CommandText="insert into timeday(project,iteration,activity,description,status,hour)values('"+this .name1 .SelectedValue +"','"+this .iteration .SelectedValue +"','"+this .activity .SelectedValue +"','"+this.name2.Text+"','"+this.status .SelectedValue +"','"+this .Text1 .Text +"')";
   cmd.Connection=conn;

   int i=cmd.ExecuteNonQuery();
   if(i>0)
   {
      cmd.CommandText="Select * from timeday";
      rdr = cmd.ExecuteReader();

      while (rdr.Read())
      {
         Console.WriteLine(rdr[0]);
      }
   }
}
finally
{
   if (rdr != null)
      rdr.Close();

   if (conn != null)
      conn.Close();
}