c#
  • sql
  • 2011-06-14 68 views 0 likes 
    0

    我在我的表Table1中有兩列syntaxquery。語法包含名爲po的數據和名爲select * from po_pomas_pur_order_hdr where pomas_pono =的查詢。我用在查詢中動態傳遞一個值?

    SqlDataAdapter da = new SqlDataAdapter("select query from Table1 where syntax = '" + textBox1.Text + "'", conn); 
    

    得到這個查詢值與我的問題是,我需要動態傳遞,我使用的DataAdapter這樣retrived查詢內的另一個值:

    SqlDataAdapter da1 = new SqlDataAdapter(da.tostring() +"'"+ textBox1.Text +"'", conn) 
    

    生成的查詢應該是這樣的這個:

    select * from po_pomas_pur_order_hdr where pomas_pono = '2PO/000002/09-10' 
    

    但是這是不可能的。如何獲得這樣的查詢?任何建議?

    +1

    我可以」不明白你到底想要什麼? – 2011-06-14 07:14:16

    +1

    第一件事將是使用[參數](http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlparameter.aspx)而不是直接從(可能是惡意)用戶的文本。 – 2011-06-14 07:17:41

    +0

    從我的理解你想創建一個複雜的SQL查詢,會給你一個查詢結果? – ub1k 2011-06-14 07:17:50

    回答

    0

    SqlDataAdapter用於填充數據集和數據表。您無法通過ToString()獲得查詢結果。我想你想使用SqlCommand來執行你的第一個查詢,以獲得實際的查詢從數據庫中像這樣運行:

    string query = null; 
    using (var command = new SqlCommand("select query from Table1 where syntax = @Syntax", conn)) 
    { 
        command.Parameters.AddWithValue("@Syntax", textBox1.Text); 
        query = command.ExecuteScalar(); // this assumes only one query result is returned 
    } 
    

    然後你可以使用數據適配器來填充它:

    SqlDataAdapter da1 = new SqlDataAdapter(query +"'"+ textBox1.Text +"'", conn); 
    

    雖然我會建議使用這個參數。

    0

    這種方式更加安全:dotnetperls

    他檢查「'」和‘\’,檢查場等類型...

    從上面的示例代碼(是插入刪除和更新相同):

    using (SqlCommand command = new SqlCommand("SELECT * FROM Dogs1 WHERE Name LIKE @Name", connection)) 
        { 
        // 
        // Add new SqlParameter to the command. 
        // 
        command.Parameters.Add(new SqlParameter("Name", dogName)); 
        // 
        // Read in the SELECT results. 
        // 
        SqlDataReader reader = command.ExecuteReader(); 
        while (reader.Read()) 
        { 
         int weight = reader.GetInt32(0); 
         string name = reader.GetString(1); 
         string breed = reader.GetString(2); 
         Console.WriteLine("Weight = {0}, Name = {1}, Breed = {2}", weight, name, breed); 
        } 
        } 
    
    +0

    with dataadapter你可以使用: SqlDataAdapter adapter = new SqlDataAdapter(command); – Lattanzio 2011-06-14 07:20:27

    0

    我建議你使用SqlParametersHere是如何使用DataAdapter和參數的示例。

    0

    前提是你有一個數據集,你打算以填補使用適配器和您調整查詢使用parameters以免sql injection你應該能夠使用這樣的事情:

    string query; 
    using(var sqlCommand = new SqlCommand(
        "select query from Table1 where [email protected]", conn)) 
    { 
        sqlCommand.Parameters.AddWithValue("syntax", textBox1.Text); 
        query = (string)sqlCommand.ExecuteScalar(); 
    } 
    
    using(var dataAdapter = new SqlDataAdapter()) 
    using(var dataCommand = new SqlCommand(query, conn)) 
    { 
        dataCommand.Parameters.AddWithValue("parameter", poNumber); 
        dataAdapter.SelectCommand = dataCommand; 
        dataAdapter.Fill(myDataSet); 
    } 
    
    相關問題