0

.mdb データベースを使用して asp.net プロジェクトでストアド プロシージャを実行する際に問題があります。ストアド プロシージャを使用したいのですが、実行コードの後...

using (OleDbConnection conn = new OleDbConnection(System.Configuration.ConfigurationManager.ConnectionStrings["Database"].ConnectionString.ToString()))
                {
                    conn.Open();
                    using (OleDbCommand com = new OleDbCommand("Insert", conn))
                    {
                        com.CommandType = CommandType.StoredProcedure;
                        com.Parameters.AddWithValue("@Login", UserName0.Text);
                        com.Parameters.AddWithValue("@Password", Hashing.Hash(ConfirmPassword0.Text));
                        com.Parameters.AddWithValue("@Role", RoleList1.SelectedValue);
                        com.ExecuteNonQuery();
                    }
                    conn.Close();

私は例外があります:

System.Data.OleDb.OleDbException: EXECUTE 後のクエリ名が必要です。

しかし、コードの下で使用すると、すべて問題ありません。私も変更しました: CommandType.StoredProcedure を CommandType.Text に変更しましたが、まだ機能しません。誰か助けてくれませんか?

using (OleDbConnection conn = new OleDbConnection(System.Configuration.ConfigurationManager.ConnectionStrings["Database"].ConnectionString.ToString()))
                {
                    conn.Open();
                    using (OleDbCommand com = new OleDbCommand("INSERT INTO Workers ( st_login, st_password, st_role ) VALUES (login, password, role);", conn))
                    {
                        com.Parameters.AddWithValue("@Login", UserName0.Text);
                        com.Parameters.AddWithValue("@Password", Hashing.Hash(ConfirmPassword0.Text));
                        com.Parameters.AddWithValue("@Role", RoleList1.SelectedValue);
                        com.ExecuteNonQuery();
                    }
                    conn.Close();
4

2 に答える 2

1

Insertコード リストが正確である場合、お勧めできない名前のストアド プロシージャがあるように見えます。予約済みのキーワードではない名前を使用してプロシージャを作成し、それが役立つかどうかを確認してください。

于 2012-08-06T10:40:44.357 に答える
0
using (OleDbConnection conn = new OleDbConnection(System.Configuration.ConfigurationManager.ConnectionStrings["Database"].ConnectionString.ToString()))
                {
                    conn.Open();
                    using (OleDbCommand com = new OleDbCommand("INSERT INTO Workers ( st_login, st_password, st_role ) VALUES (?, ?, ?);", conn))
                    {
                        com.Parameters.AddWithValue("@Login", UserName0.Text);
                        com.Parameters.AddWithValue("@Password", Hashing.Hash(ConfirmPassword0.Text));
                        com.Parameters.AddWithValue("@Role", RoleList1.SelectedValue);
                        com.ExecuteNonQuery();
                    }
                    conn.Close();

Ms-Access はストアド プロシージャをサポートしていないことに注意してください。非常に複雑なクエリが必要な場合は、Sql Server を使用してください。アプリケーションがasp.netを使用しているため。バックエンドとして Sql Server を使用する ASP.Net をお勧めします。とにかくあなたの答えのために、パラメータを?に置き換えてください。MS-Access を使用する場合。上記を参照。

于 2012-08-06T10:41:08.247 に答える