2011-05-03 76 views
0

我想让用户输入的值再次显示在表单中..我的值被输入到SQL Server数据库中,但我不知道如何形式再次检索值..我的代码是:如何从SQL Server 2005中检索asp.net表单中的值

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(); 
} 
+1

您的代码容易受到[SQL注入](http://xkcd.com/327/)。 – 2011-05-03 07:45:14

回答

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 GridView控件:

DataTable projectData = GetDataForProject("MyProject"); 

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

你已经给出了正确的道路..代码将如何,如果我想显示数据库中的值 – jeni 2011-05-03 10:36:11

+0

@jeni:更新我的答案与代码从数据库检索数据 – 2011-05-03 11:01:41

+0

这帮助我很多..我是新来的sql.How我可以顺利这些对象像sqlconnection,sqlcommand,sqldatareader,sqldataadapter ..我也想澄清一个更多的que与你如何访问使用c#的html控件(id)..事先感谢.. .. – jeni 2011-05-03 11:30:13

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(); 
} 
相关问题