c#
  • sql
  • 2011-06-14 22 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); 
    } 
    
    相关问题