2011-05-03 92 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(); 
} 
相關問題