1

VB アプリケーション (Visual Studio 2005 Pro を使用) に PostgresQL を使い始め、ODBC 経由で接続します (ネイティブの PostgresQL コネクタではなく、ODBC 接続を使用する理由があります)。

MSSQLで@somethingand形式を使用することに慣れています。cmd.Parameters.Add("@something", data)フォームから取得してinsertステートメントで使用したい9つの値がありますが、PostgresQLの構文を理解できないようです。

アイデア?私はこのところで答えを見つけようとして2日間検索しました。

編集:申し訳ありませんが、試していたコードを既に削除しましたが、最初のパラメーターである列「名前」で「列が存在しません」というエラーが発生し続けました。

次のコードが機能するため、接続エラーや命名規則の問題などではないことはわかっています。テストのために今やっている方法は次のとおりです。

strSQL = "INSERT INTO tableb (name, extension, length,creationtime,lastaccesstime,lastwritetime,directoryname) VALUES ('Name','Extension','Length','CreationTime','LastAccessTime','LastWriteTime','DirectoryName')"

objConn.ConnectionString = strConnString
        objConn.Open()
        With objCmd

            .Connection = objConn
            .CommandText = strSQL
            .CommandType = CommandType.Text
            .ExecuteNonQuery()
        End With

ああ、私が使用している ODBC バージョンは 8.03.02.00 です

詳細情報: エラーの原因となっているコード:

strSQL = "INSERT INTO TABLEB (name) VALUES (@name)"

    objConn.ConnectionString = strConnString
    objConn.Open()
    'Try
    With objCmd
        .Parameters.Add("@name", SqlDbType.Int)
        .Parameters("@name").Value = "SomeText"

        .Connection = objConn
        .CommandText = strSQL
        .CommandType = CommandType.Text
        .ExecuteNonQuery()
    End With

パラメータ付きのコード:

正確なエラー: ODBC 例外:

"ERROR [42703] ERROR: column "name" does not exist;
Error while executing the query"

エラーは.ExecuteNonQueryで発生します

再度、感謝します!

4

2 に答える 2

0

書かれているように、そのクエリは問題ありません。記載されているエラーを考えると、考えられる問題は次のとおりです。

  • 引用時の大文字の問題。列が定義されている場合は、 orではなく、どこでも"Name"参照する必要があります。字句構造を参照してください。"Name"Namename

  • 間違ったデータベースへのアクセス、またはセットアップして忘れた同じデータベースの古いバージョン (列のtablebないを含むデータベース) へのアクセスname

  • クエリを「匿名化」することで、実際の問題を隠したり、引用したエラーが実行中のコードと一致しません。たとえば、引用の問題。

表示されているコードがエラーの原因であると確信していますか? 本文ではetcと言っ@parameterていますが、コードではそのようなことはありません...

SQL インジェクション攻撃を防ぐために、このアプローチの代わりにパラメーター化されたクエリを使用する必要があります。実際のコードでは値がハードコーディングされていないと確信しているためです。パラメーターの使用は、psqlODBC と MS SQL Server の ODBC ドライバーの間で違いはないはずです。これは、クエリ パラメーターの要点の半分です。私は Visual Basic (できれば ODBC) を話せませんし、SQL インジェクションのロゼッタ ストーンには VB.NET の詳細がありません。MS SQL Server で行っていることを試してみてください。問題がある場合は、正確なコードとエラーを含む新しい質問をフォローアップしてください。

于 2013-07-11T01:51:22.227 に答える