【问题标题】:C# oledb Number of query values and destination fields are not the sameC# oledb 查询值和目标字段的个数不一样
【发布时间】:2018-05-31 13:24:09
【问题描述】:

我收到“查询值的数量和目标字段的数量不一样”的错误消息。对于下面出现的代码部分 -

        public static void SaveCurrentPlaylistToSheet(YouTubeVideo[] CurrentPlaylist)
    {
        string currentTitle;

        using (connection = new OleDbConnection(ConnectionString))
        {
            connection.Open();
            command = new OleDbCommand();
            command.Connection = connection;

            using (command = connection.CreateCommand())
            {
                for (int i = 0; i < CurrentPlaylist.Length; i++) 
                {
                    currentTitle = Regex.Replace(CurrentPlaylist[i].title, " ", "");

                    if (NewPlaylist)
                    {
                        command.CommandText = string.Format("INSERT INTO [" + ActiveSheetTitle + "] (F1) values({0})", currentTitle);
                        NewPlaylist = false;
                    }
                    else
                    {
                        command.CommandText = string.Format("INSERT INTO [" + ActiveSheetTitle + "$] (F1) values({0})", currentTitle);
                    }
                    command.ExecuteNonQuery(); // Execute insert query against excel file.
                }
            }

任何解决问题的帮助将不胜感激。 谢谢, 阿弥陀佛

【问题讨论】:

  • 如果您的 currentTitle 变量包含逗号怎么办?连接字符串以形成 sql 命令很糟糕,真的很糟糕。使用参数
  • 另外,您需要用单引号将字符串括起来以便查询引擎理解它。
  • 我的第一个想法和其他人一样,很有可能您的播放列表存在字符串卫生问题。您是否尝试过在调试器中捕获异常,然后检查命令文本以查看这是否是您的问题?

标签: c# excel oledb


【解决方案1】:

如果您的 currentTitle 变量恰好有一个逗号,那么您的查询将失败,因为它被视为两个字段。您应该在构建查询文本并使用参数集合传递值时使用参数

string cmdText = "INSERT INTO [" + ActiveSheetTitle + "] (F1) values(?)";
if (NewPlaylist)
    NewPlaylist = false;
command.Parameters.Add("@f1", OleDbType.VarWChar).Value = currentTitle;
command.ExecuteNonQuery(); 

要考虑的一点是 ActiveSheetTitle 变量。不要让您的用户键入该值。您应该在名称白名单中的某个位置定义它,以避免对该变量进行可能的 Sql 注入。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多