0

このコードが機能しないのはなぜですか? cmd.ExecuteNonQuery(); であっても、エラーは発生しません。は 1 を返します (データベースの 1 行を変更した場合) が、実際のデータベースではまったく変更がありません。他のデータベーステーブルでは、このコードは適切に機能しますが、このテーブルから行を削除することもできません-「読み取り専用」の場合はそのまま動作しますが、理由はわかりません-昨日、すべてが正常に機能し、今、それは突然動作しなくなりました:-(

string sConnectionString;

                sConnectionString = "Data Source=.\\SQLEXPRESS; AttachDbFilename=\"" + zdielaneInfo.Adresar + "\\rozvrh.mdf\";";
                sConnectionString += "Integrated Security=True;User Instance=True";
                SqlConnection objConn
                    = new SqlConnection(sConnectionString);
                objConn.Open();



                SqlCommand cmd = new SqlCommand("", objConn);
                if (zdielaneInfo.Edit)

                    cmd.CommandText = "UPDATE subject " +
                                        "SET name = @name, day = @day, timeStart = @timeStart, timeEnd = @timeEnd "
                                        + "WHERE id = @id";
                else
                    cmd.CommandText = "INSERT INTO subject (name, day, timeStart, timeEnd) " +
                                         "Values (@name, @day, @timeStart, @timeEnd)";
                cmd.Parameters.Add(new SqlParameter("@name", txbName.Text));
                cmd.Parameters.Add(new SqlParameter("@day", dniNaInt(cbDen.Text)));
                cmd.Parameters.Add(new SqlParameter("@timeStart", DateTime.Parse(txbStart.Text)));
                cmd.Parameters.Add(new SqlParameter("@timeEnd", DateTime.Parse(txbEnd.Text)));
                cmd.Parameters.Add(new SqlParameter("@id", zdielaneInfo.Id));
                cmd.ExecuteNonQuery();
                objConn.Close();
4

3 に答える 3

1

テーブルがロックされている可能性があります。

HEREから、これを試してください:

select  
    object_name(P.object_id) as TableName, 
    resource_type, resource_description
from
    sys.dm_tran_locks L
    join sys.partitions P on L.resource_associated_entity_id = p.hobt_id

テーブルが結果セットにある場合は、答えがあります。


別の可能性は、実行に使用しているユーザーです。特権を剥奪されたのかもしれません。

于 2012-05-17T15:29:32.617 に答える
1

あなたの問題は、mdf ファイルの上書きの問題のようです。

デバッグ フォルダーに配置され、アプリケーションを実行するたびに置き換えられる mdf ファイルにアクセスしています。

プロジェクトで、ソリューション内にデータベースが接続されている場合は、それを上書きしていないことを確認してください。そのため、ソリューション エクスプローラーで mdf ファイルを選択し、その [出力にコピー] が [コピーしない] に設定されていることを確認してから、手動で mdf ファイルを project\bin\debug フォルダーにコピーしてから、アプリケーションを実行します。

それが役に立てば幸い。

于 2012-05-17T15:50:19.167 に答える
0

user instance / attachdbfilename オプションの使用をやめてください ( user instance は非推奨です!)。実際の SQL Server 上にデータベースを作成し、接続文字列を使用して直接接続します。この廃止された機能を使用すると、プログラムを起動するたびにデータベースの新しいコピーが開始され、昨日挿入したものはもう存在しなくなります。また、2 つの異なるアプリケーションからその接続文字列を使用してデータベースに接続すると、 、一方は他方が変更しているデータを見ることはありません。

于 2012-05-17T16:01:37.600 に答える