1
String nam = name.Text;
SqlConnection cn = new SqlConnection("Data Source=.\\SQLEXPRESS;AttachDbFilename=|DataDirectory|\\test.mdf;Integrated Security=True;User Instance=True");
SqlCommand cmd = new SqlCommand("INSERT INTO tab(tname)VALUES(@val)", cn);
cmd.Parameters.AddWithValue("@val", nam);
cn.Open();
int cnt = cmd.ExecuteNonQuery();
MessageBox.Show("Message:" + cnt);
cn.Close();

これは私のコードです。メッセージが表示されますMessage:1。ただし、値はデータベース テストに挿入されません。テーブル名は列名を持つタブtnameです。

何が間違っている可能性がありますか?

4

1 に答える 1

0

このUser Instance と AttachDbFileName=のアプローチ全体には欠陥があります - せいぜい! Visual Studio は.mdfファイルを (Visual Studio がアプリを実行している出力ディレクトリに)コピーし、おそらく問題なく動作しますが、最終的に間違った .mdf ファイルINSERTを見ているだけです!

このアプローチに固執したい場合は、cn.Close()呼び出しにブレークポイントを設定してから、 .mdfSQL Server Mgmt Studio Express でファイルを調べてください。データがそこにあることはほぼ確実です。

私の意見では、本当の解決策は

  1. SQL Server Express をインストールします (とにかく、既に完了しています)。

  2. SQL Server Management Studio Express をインストールする

  3. SSMS Expressでデータベースを作成し、論理名を付けます (例: TestDB)

  4. 論理データベース名(サーバー上でデータベースを作成したときに指定) を使用して接続し、物理データベース ファイルとユーザー インスタンスをいじらないでください。その場合、接続文字列は次のようになります。

    Data Source=.\\SQLEXPRESS;Database=TestDB;Integrated Security=True
    

    そして、それ以外はすべて以前とまったく同じです...

于 2012-10-29T06:31:33.583 に答える