1

データベースにデータを保存するためにこのコードを検索して見つけました。接続文字列は問題なく、例外やエラーはスローされませんが、このコードがデータベースにデータを保存しない理由がわかりません。

    string query = "Insert Into BookConfiguration (BookNum, x_axis, y_axis, BookName) Values (@BookNum, @x_axis, @y_axis, @BookName)";
    string connStr = "Data Source=.\\SQLEXPRESS;AttachDbFilename=|DataDirectory|\\BookShelf.mdf;Integrated Security=True;User Instance=True";


    try
    {
        using (SqlConnection conn = new SqlConnection(connStr))
        {                   
                SqlDataAdapter da = new SqlDataAdapter();
                da.InsertCommand = new SqlCommand(query, conn);
                da.InsertCommand.Parameters.Add("@BookNum", SqlDbType.Int).Value = quantity;
                da.InsertCommand.Parameters.Add("@x_axis", SqlDbType.Int).Value = x;
                da.InsertCommand.Parameters.Add("@y_axis", SqlDbType.Int).Value = y;
                da.InsertCommand.Parameters.Add("@BookName", SqlDbType.Text).Value = openFileDialog1.FileName;
            conn.Open();    

            da.InsertCommand.ExecuteNonQuery();

            conn.Close();
        }
    }

    catch (SqlException ex)
    {
        MessageBox.Show("Error Occured " + ex.Message);
    }

編集 私は今、同じ問題のコードを変更しました

コード:

        try
        {
            using (TransactionScope scope = new TransactionScope())
            {

                using (SqlConnection conn = new SqlConnection(connStr))
                {
                    conn.Open();
                    using (SqlCommand cmd = new SqlCommand(query, conn))
                    {
                        cmd.Parameters.Add(new SqlParameter("@BookNum", quantity));
                        cmd.Parameters.Add(new SqlParameter("@x_axis", x));
                        cmd.Parameters.Add(new SqlParameter("@y_axis", y));
                        cmd.Parameters.Add(new SqlParameter("@BookName", openFileDialog1.FileName));
                        cmd.ExecuteNonQuery();
                    }
                    conn.Close();
        }

                scope.Complete();
            }
        }

曖昧ではなく明確だといいのですが...

C#Visual Studio 2010 SQLServer2008でコーディングされています。

4

1 に答える 1

4

非推奨のユーザーインスタンス/AttachDbFileName機能を使用しているため、プログラムとは異なるデータベースのコピーを参照していることをほぼ保証できます。

続行する方法については、ここで@marc_sからの回答を参照してください。

https://stackoverflow.com/a/10740026/61305

基本的に、この役に立たない機能の使用をやめてください。データベースをSQLServerの実際のインスタンスに接続すると、データベースが修正され、プログラムと同じコピーに接続できます...

于 2012-05-24T21:20:43.020 に答える