[エラー 1] SqlServer プロンプト エラー: OleDbException スカラー変数を宣言する必要があります
現在、.netを使用してOledbを使用してSqlServerを操作しているのですが、常に「スカラー変数を宣言する必要があります...」と不可解なことにコードで次の2つの方法を採用しましたが、役に立ちません。
方法 1: OleDbParameter[] p = new OleDbParameter[] {
new OleDbParameter("@aa",1),
new OleDbParameter("@bb","shelley"),
new OleDbParameter("@cc",DateTime.Now)
};
Objcmd.Parameters.AddRange(p);
方法 2: OleDbParameter pp;
pp = 新しい OleDbParameter("@aa",OleDbType.Integer);
pp.値 = 1;
Objcmd.Parameters.Add(pp);
pp = new OleDbParameter("@bb", OleDbType.LongVarChar);
pp.Value = "シェリー";
Objcmd.Parameters.Add(pp);
pp = new OleDbParameter("@cc", OleDbType.Date);
pp.Value = DateTime.Now;
Objcmd.Parameters.Add(pp); どのように書いても、「スカラー変数 @aa を宣言する必要があります」というプロンプトが表示されます。最後の理由は次の文です。 OleDbCommand = new OleDbCommand("insert into test (a, b,c) value(@aa,@bb,@cc)", Objconn);正しい書き方: OleDbCommand Objcmd = new OleDbCommand("insert into test (a,b,c)values(?,?,?)", Objconn);このままでは正常に通りました。 [エラー 2] Sybase はエラーを表示します: このインターフェイスはサポートされていません (例外は HRESULT:0x80004002 (E_NOINTERFACE) から発生します)。SQL ステートメント内で同じパラメータが複数回使用される可能性があるため、net は Oledb を使用して Sybase を操作します。次のように:
OleDbCommand Objcmd = new OleDbCommand("更新テスト セットa=@aa where a=@aa ", Objconn);
OleDbParameter[] p = 新しい OleDbParameter[] {
new OleDbParameter("aa",1),
new OleDbParameter("aa",1)
};
Objcmd.Parameters.AddRange(p);
Objconn.Open();
Objcmd.ExecuteNonQuery();
Objconn.Close(); 上記のコードでは、「このインターフェイスはサポートされていません (HRESULT: 0x80004002 (E_NOINTERFACE) からの例外です)」というエラーが表示されます。問題の原因は、パラメータに同じ名前が 2 つあることです。この場合、変更する必要があるのは 1 つのパラメータだけです。
OleDbCommand Objcmd = new OleDbCommand("更新テスト セットa=@aa where a=@aa ", Objconn);
OleDbParameter[] p = 新しい OleDbParameter[] {
new OleDbParameter("aa",1)
};または
OleDbCommand Objcmd = new OleDbCommand("更新テスト セットa=@aa where a=@aa2 ", Objconn);
OleDbParameter[] p = 新しい OleDbParameter[] {
new OleDbParameter("aa",1),
new OleDbParameter("aa2",1)
};【まとめ】
SqlServer と Sybase をサポートする必要があるプログラムを作成する場合は、次の点に特別な注意を払う必要があります。
1.SqlServer はパラメーターのプレースホルダーとして「?」を使用する必要があるため、同じパラメーターを使用する場合でもパラメーターを複数回追加する必要があります。
2. Sybase が同じパラメータを複数回使用する場合、パラメータを複数回追加することはできません。追加しない場合は、エラーが報告されます。
http://www.cnblogs.com/shelley/archive/2010/05/25/1743438.html