1

これは私には少し奇妙です。

次のコードがあります。

      public static object[,] dbMultipleSingleQueries(string strDBPath, object[] oSQL)
      {
       //This is needed for attaching a DB.
       object[,] objOut;
       objOut = new Object[1, 1];
       try
       {

        //Prepare DB connection string      
        strDBPath = "Data Source=" +
              @strDBPath +
              ";Version=3";

        //SQL Objs
        SQLiteConnection dbConnection = new SQLiteConnection(strDBPath);
        SQLiteCommand dbCommand = null;
        SQLiteDataAdapter dbAdapter = null;
        DataTable table = new DataTable();
        //For looping
        int j = 0;
        //Conn str
        dbConnection.Open();
        dbCommand = new SQLiteCommand(dbConnection);
        while (j < oSQL.Length)
        {
         try
         {
          dbCommand.CommandText = oSQL[j].ToString();
          dbCommand.CommandType = System.Data.CommandType.Text;
          if (j == (oSQL.Length - 1))
          {
           dbAdapter = new SQLiteDataAdapter(dbCommand);
           dbAdapter.Fill(table);
           objOut = table2Array(table);
          }
          else
          {

           dbCommand.ExecuteNonQuery();
           objOut[0, 0] = "Success!";
          }
         }
         catch (Exception e2)
         {
          System.Console.WriteLine(e2.StackTrace.ToString());
          objOut[0, 0] = e2.StackTrace.ToString();
         }
         j++;
        };
        dbConnection.Close();
        dbConnection = null;

       }
       catch (Exception e)
       {
        objOut[0, 0] = e.StackTrace.ToString();
       }
       return objOut;

      }

次のようにスプレッドシートから引数を入力すると、完全に機能します。

    o = Application.Run("dbMultipleSingleQueries", "20130201.db", [test])

[test] はワークブック内の範囲で、クエリは次のように機能します。

attach database 'a.db' as d1

select * from d1.main

今、VBAで次のことをすると

    Option Explicit
    Sub Main()

    Dim sql(1 To 2, 1 To 1)

    sql(1, 1) = "attach database 'a.db' as d1"
    sql(2, 1) = "select * from d1.main"

    o = Application.Run("dbMultipleSingleQueries", "20130201.db", sql)

    End Sub

これは動作しません。「タイプが一致しません」というエラーが表示されます。なぜこれが私を夢中にさせる大きな助けになるのか、どんな入力でも!

4

1 に答える 1

1

関数プロトタイプは、2 番目の引数が「Object[]」型である必要があることを指定していますが、割り当てに基づいて、おそらく文字列配列であると考えるバリアントを渡しています。

于 2013-02-05T03:41:32.400 に答える