首页 > 解决方案 > PostgreSQL,Npgsql 返回 42601:“$1”或附近的语法错误

问题描述

在传递 PostgreSQL 命令时出现以下错误

42601:“$1”处或附近的语法错误

using (Npgsql.NpgsqlConnection conn = new Npgsql.NpgsqlConnection(DBManager.GetConnectionString()))
            {
                conn.Open();
                Logger.Info("connection opened for adding column");
                using (Npgsql.NpgsqlCommand addColumnQuery = new Npgsql.NpgsqlCommand(@"ALTER TABLE @tableName ADD COLUMN IF NOT EXISTS @columnName  @columnType;", conn))
                {
                    addColumnQuery.Parameters.AddWithValue("@tableName", tableName);
                    addColumnQuery.Parameters.AddWithValue("@columnName", columnName);
                    addColumnQuery.Parameters.AddWithValue("@columnType", columnType);
                    addColumnQuery.ExecuteNonQuery();
                }
            }

标签: c#sqlsql-injectionpsqlnpgsql

解决方案


经过一些测试,我发现只能将表值作为参数传递,而不是表名和列名。所以我改变了这样的代码

ALTER TABLE tableName ADD COLUMN columnName columnType;

推荐阅读