我尝试调试代码和注释,但是似乎找不到问题。 I am getting the this error:
“ FROM”附近的语法不正确。
描述:在执行当前Web请求期间发生未处理的异常。请查看堆栈跟踪,以获取有关错误及其在代码中起源的更多信息。
异常详细信息:System.Data.SqlClient.SqlException:'FROM'附近的语法不正确。
我的代码:
public List<string> GetTableColumns(string tableName)
{
List<string> colCollection = new List<string>();
IDataReader reader = null;
using (var cmd = MyDB.GetSqlStringCommand("SELECT * FROM " + tableName))
{
using (reader = MyDB.ExecuteReader(cmd))
{
foreach (DataRow r in reader.GetSchemaTable().Rows)
{
colCollection.Add(r["ColumnName"].ToString());
}
reader.Close();
}
}
return colCollection;
}
答案 0 :(得分:2)
建议您像下面那样使用字符串格式来正确格式化字符串,并检查表名是否存在
public List<string> GetTableColumns(string tableName)
{
if(!String.IsNullOrWhiteSpace(tableName))
{
string query = string.Format( "SELECT * FROM [{0}]",tableName);
// or use string interpolation
string query = $"SELECT * FROM [{tableName}]";
//rest of the code execute reader
//return collection of string
}
return new List<string>();
}
在表名周围添加[]
,因为sql中的表名可能包含空格示例。 SELECT * FROM [My Table]
,这也可能引起问题(请查看此答案以获取更多详细信息:SELECT query on a table with a space in the name using SQSH)
答案 1 :(得分:0)
正如@PranayRana在对他的答案的评论中提到的那样,此问题主要是由于传递给tableName
的{{1}}参数是GetTableColumns()
或空字符串。我有98%的把握。
使用参数之前,需要检查它。但是我宁愿返回一个默认值(因为它是 literally ,是特殊情况),而不是返回默认值(例如,空列表),例如:
null
还有一件事。您还需要处理SQL命令的转义。例如,您不仅可以使用MS SQL Server public List<string> GetTableColumns(string tableName)
{
if (tableName == null)
throw new ArgumentNullException(nameof(tableName));
if (string.IsNullOrWhitespace(tableName))
throw new ArgumentException("Table name can't be empty!", nameof(tableName));
List<string> colCollection = new List<string>();
using (var cmd = MyDB.GetSqlStringCommand($"SELECT * FROM {tableName}"))
using (var reader = MyDB.ExecuteReader(cmd))
foreach (DataRow r in reader.GetSchemaTable().Rows)
colCollection.Add(r["ColumnName"].ToString());
return colCollection;
}
,还需要SELECT * FROM User;
,有时甚至需要SELECT * FROM [User];
。对于DBMS,这可能有所不同。
根据建议,我建议您学习有关 ORM 的知识,例如SELECT * FROM [dbo].[User];
或EntityFramework
,因为这样您就可以摆脱此 DBMS >相对的东西,例如语法或转义序列。