Select table 使用列表框
Select table using ListBox
我正在尝试阅读 table 语句中的 SQL。表的名称被拉入列表框中。
用户将 select 他们想要查看其数据的 table 的名称,然后我的方法将读取+可视化+导出 table.
问题在于 table 的名称作为动态值。最初我用IronPython写代码,还可以。
现在我正在将它翻译成 C#,但我遇到了一个语法问题(很明显,这里发布的服务器 address/login 不是真实的)。
tables 名称通过单独的方法填充到 listBox1 中。
private void rEADSELECTEDTABLE_Click(object sender, EventArgs e)
{
string tableName = listBox1.GetItemText(listBox1.SelectedItem);
MessageBox.Show(" Table Selected: " + tableName);
try
{
string sqlConnectionString;
myConnectionString = @"server=000.00.000.0;database=myDatabase;uid=myUser;password=myPassword";
mySQL = new SqlConnection(myConnectionString);
mySQL.Open();
SqlCommand myCommand2 = new SqlCommand("SELECT * FROM @myTable", mySQL);
SqlParameter param = new SqlParameter();
param.ParameterName = "@myTable";
param.Value = tableName;
myCommand2.Parameters.Add(param);
SqlDataAdapter myAdapter = new SqlDataAdapter();
myAdapter.SelectCommand = myCommand2;
DataSet dataSet = new DataSet();
myAdapter.Fill(dataSet);
List<string> rows = new List<string>();
List<string> rowData = new List<string>();
foreach (DataTable table in dataSet.Tables)
foreach (DataRow row in table.Rows)
foreach (DataColumn column in table.Columns)
if (row[column] != null)
rowData.Add(row[column].ToString());
foreach (String s in rowData)
Console.WriteLine(s);
mySQL.Close();
}
}
当我 运行 代码时,我得到这个错误:
System.Data.SqlClient.SqlException (0x80131904): Must declare the table variable "@myTable".
如果我使用静态 table 名称,一切正常。
SqlCommand myCommand2 = new SqlCommand("SELECT * FROM TABLE_NAME", mySQL);
SqlDataAdapter myAdapter = new SqlDataAdapter();
myAdapter.SelectCommand = myCommand2;
非常感谢帮助。
不能将 TableName 用作 SqlCommand 的参数
更改 sql 查询,例如:
SqlCommand myCommand2 = new SqlCommand("SELECT * FROM " + tableName, mySQL);
或
SqlCommand myCommand2 = new SqlCommand(string.Format("SELECT * FROM {0}", tableName), mySQL);
但要小心 sql 注入攻击!
另一种方法是使用存储过程使用动态 sql 查询并将 table 名称作为参数发送
我正在尝试阅读 table 语句中的 SQL。表的名称被拉入列表框中。
用户将 select 他们想要查看其数据的 table 的名称,然后我的方法将读取+可视化+导出 table.
问题在于 table 的名称作为动态值。最初我用IronPython写代码,还可以。
现在我正在将它翻译成 C#,但我遇到了一个语法问题(很明显,这里发布的服务器 address/login 不是真实的)。
tables 名称通过单独的方法填充到 listBox1 中。
private void rEADSELECTEDTABLE_Click(object sender, EventArgs e)
{
string tableName = listBox1.GetItemText(listBox1.SelectedItem);
MessageBox.Show(" Table Selected: " + tableName);
try
{
string sqlConnectionString;
myConnectionString = @"server=000.00.000.0;database=myDatabase;uid=myUser;password=myPassword";
mySQL = new SqlConnection(myConnectionString);
mySQL.Open();
SqlCommand myCommand2 = new SqlCommand("SELECT * FROM @myTable", mySQL);
SqlParameter param = new SqlParameter();
param.ParameterName = "@myTable";
param.Value = tableName;
myCommand2.Parameters.Add(param);
SqlDataAdapter myAdapter = new SqlDataAdapter();
myAdapter.SelectCommand = myCommand2;
DataSet dataSet = new DataSet();
myAdapter.Fill(dataSet);
List<string> rows = new List<string>();
List<string> rowData = new List<string>();
foreach (DataTable table in dataSet.Tables)
foreach (DataRow row in table.Rows)
foreach (DataColumn column in table.Columns)
if (row[column] != null)
rowData.Add(row[column].ToString());
foreach (String s in rowData)
Console.WriteLine(s);
mySQL.Close();
}
}
当我 运行 代码时,我得到这个错误:
System.Data.SqlClient.SqlException (0x80131904): Must declare the table variable "@myTable".
如果我使用静态 table 名称,一切正常。
SqlCommand myCommand2 = new SqlCommand("SELECT * FROM TABLE_NAME", mySQL);
SqlDataAdapter myAdapter = new SqlDataAdapter();
myAdapter.SelectCommand = myCommand2;
非常感谢帮助。
不能将 TableName 用作 SqlCommand 的参数
更改 sql 查询,例如:
SqlCommand myCommand2 = new SqlCommand("SELECT * FROM " + tableName, mySQL);
或
SqlCommand myCommand2 = new SqlCommand(string.Format("SELECT * FROM {0}", tableName), mySQL);
但要小心 sql 注入攻击!
另一种方法是使用存储过程使用动态 sql 查询并将 table 名称作为参数发送