2

C# Windows アプリケーションがあり、(ユーザーが入力した) データをアクセス データベースに挿入しようとしています。エラーは発生していませんが、データが入力されていません。何か考えはありますか?

        string sqlInsert = "insert into assessment (id) values (@id)";

        using (OleDbConnection conn = new OleDbConnection(dsn))
        {

            OleDbCommand cmd = new OleDbCommand(sqlInsert, conn);

            cmd.Parameters.Add("@id", OleDbType.VarChar, 50).Value = iDTextBox.Text.Trim().Length != null ? storedID.Trim() : "";

            conn.Open();
            cmd.ExecuteNonQuery();
            conn.Close();
        }

id のデータ型はText.

編集: 接続文字列は app.config に次のように保存されます。

<add name="conn" connectionString="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=|DataDirectory|\CADSCUPP.mdb" providerName="System.Data.OleDb"/>

コード内で次のようにアクセスします。

private string dsn = System.Configuration.ConfigurationManager.ConnectionStrings["conn"].ConnectionString;

レコードを手動で挿入すると (コード ビハインド コードではなく)、接続が機能するように、プログラムの他の場所でレコードを読み取ることができます。

4

5 に答える 5

2

Windows 7 は、WinForms アプリをコンパイルおよび実行するときに、他の場所に Access データベースのコピーを作成することが知られています。ASP.NET アプリでこれが行われるかどうかはわかりませんが、可能性はあります。アプリがアクセスしているデータベースが、あると思われる場所にあることを確認する価値があるかもしれません。

于 2012-10-02T15:53:17.193 に答える
1

Sql Text では @ の代わりに疑問符を使用します。パラメータ名はアクセスには関係ありません。注文のみがカウントされます。私はかなり長い間アクセスを使用していませんでしたが、それは私が覚えていることの 1 つです。Access では、パラメーター名は重要ではありません。

string sqlInsert = "insert into assessment (id) values (?)";

        using (OleDbConnection conn = new OleDbConnection(dsn))
        {

            OleDbCommand cmd = new OleDbCommand(sqlInsert, conn);

            cmd.Parameters.Add("?", OleDbType.VarChar, 50).Value = iDTextBox.Text.Trim().Length == 0 ? storedID.Trim() : "";

            conn.Open();
            cmd.ExecuteNonQuery();
            conn.Close();
        }
于 2012-09-27T19:01:49.710 に答える
0

接続文字列に認証が表示されません。次の文字列のいずれかを試してください。

http://www.connectionstrings.com/access-2007

于 2012-09-27T21:48:32.423 に答える
0

文字列接続が正しいことを確認できます

サンプル :

connetionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=yourdatabasename.mdb;"
于 2012-09-27T16:08:08.077 に答える
0

コマンドタイプについて言及していないと思います。次のような別の行を追加します。

OleDbCommand cmd = new OleDbCommand(sqlInsert, conn);
cmd.CommandType = CommandType.Text; 
于 2013-12-26T18:48:56.490 に答える