Как получить значения в форме asp.net из SQL Server 2005 - PullRequest
0 голосов
/ 03 мая 2011

Я хочу, чтобы введенные пользователем значения снова отображались в форме .. мои значения вводятся в базу данных SQL Server, но я не знаю, как получить значения снова в форме .. мой код:

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 голосов
/ 03 мая 2011

После вставки необходимо написать запрос для получения записей. Напишите это


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();
}
0 голосов
/ 03 мая 2011

Вы должны:

  • избегать SQL-инъекций и не просто объединять вместе свои операторы SQL!Вместо этого используйте параметризованные запросы !
  • Поместите ваши SqlConnection и SqlCommand объекты в блоки
  • , когда вы хотите вызвать оператор 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();
}

Это было быеще лучше, если вы:

  • получит строку подключения из файла конфигурации один раз, централизованно, и просто передаст ее этому методу
  • будет получать значения, которые нужно установить из вашего веб-интерфейсав своем коде пользовательского интерфейса, а затем вызовите этот бизнес-метод для объекта бизнес-логики и передайте значения, которые вы определили

Прямо сейчас вы дико смешиваете код пользовательского интерфейса (извлекая значения израскрывающиеся списки и текстовые поля) с кодом базы данных / бизнес-логики - это не очень солидный дизайн .....

Обновление: если вы хотите получить значения и отобразить их, вы можете использоватькак то так:

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 и считывать эти данные в объекты домена (вместо *).1046 *)

, но базовая настройка - использование определенного метода, передача критериев, чтение данных с помощью SqlConnection и SqlCommand при использовании блоков - останется прежней.

Получив DataTable, вы можете связать его с сеткой просмотра ASP.NET:

DataTable projectData = GetDataForProject("MyProject");

gridView1.DataSource = projectData;
gridView1.DataBind();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...