我的表syntax
中有两列query
和Table1
。语法包含名为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重新检索这个值:
SqlDataAdapter da1 = new SqlDataAdapter(da.tostring() +"'"+ textBox1.Text +"'", conn)
生成的查询应如下所示:
select * from po_pomas_pur_order_hdr where pomas_pono = '2PO/000002/09-10'
但这是不可能的。如何获得这样的查询?有什么建议吗?
答案 0 :(得分: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);
}
}
答案 1 :(得分:0)
我建议您使用SqlParameters。 Here是如何使用DataAdapter和参数的示例。
答案 2 :(得分: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);
虽然我建议也使用参数。
答案 3 :(得分:0)
如果您有一个DataSet,您打算使用适配器进行填充,并且您调整查询以使用parameters以避免sql injection您应该能够使用以下内容:
string query;
using(var sqlCommand = new SqlCommand(
"select query from Table1 where syntax=@syntax", 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);
}