0

こんにちは、今日、私のアプリケーションに問題があり、大きな問題が発生しました:

SQL Server 2005 Express Edition で vs2008 prof を使用しています。

問題は、あるテーブルの行を更新しようとすると、 update.executeNonQuery() が値 1 を返すことです。これは、1 行が更新されたが、行が更新されていないことを意味します。

テーブルデータを開いてフィールドを変更して値を手動で変更しようとすると、機能して保存されますが、それ以外の場合は何もしません。

また、同じソフトウェア キットを使用して別のマシンで実行しようとしましたが、IIS7 でも同じことを実行しようとしましたが、問題は解決しません。

誰かが私が何をすべきかについていくつかの提案をすることができますか、または誰かがこの問題に遭遇した場合、私は本当に助けが必要であり、私はそれを高く評価します!

後で編集: - ソースコードを追加

    int user_id = (int)Session["UserId"];
    SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString);
    con.Open();
    SqlCommand update = new SqlCommand("update profil_candidat set nume = @pnume, prenume = @pprenume, data_nasterii = @pdata_nasterii, id_oras = @pid_oras , adresa = @padresa where id_utilizator=@pid_utilizator",con);
    update.Parameters.Add("pnume", SqlDbType.VarChar);
    update.Parameters.Add("pprenume", SqlDbType.VarChar);
    update.Parameters.Add("pdata_nasterii", SqlDbType.VarChar);
    update.Parameters.Add("pid_oras", SqlDbType.VarChar);
    update.Parameters.Add("padresa", SqlDbType.VarChar);
    update.Parameters.Add("pid_utilizator",SqlDbType.Int);
    int an = Convert.ToInt32(AnDropDownList.SelectedItem.Value);
    int luna = Convert.ToInt32(LunaDropDownList.SelectedItem.Value);
    int zi = Convert.ToInt32(ZiDropDownList.SelectedItem.Value);
    DateTime data = new DateTime(an, luna, zi);
    update.Parameters["pnume"].Value = TextBoxNume.Text;
    update.Parameters["pprenume"].Value = TextBoxPrenume.Text;
    update.Parameters["pdata_nasterii"].Value = data;
    update.Parameters["pid_oras"].Value = DropDownList1.SelectedItem.Value;
    update.Parameters["padresa"].Value = TextBoxAdresa.Text;
    update.Parameters["pid_utilizator"].Value = int.Parse(Session["UserId"].ToString());
    update.ExecuteNonQuery();
    con.Close();

後で編集

解決された問題は、実際には次のものに関連していたようです:

SqlCommand.Parameters ASP.NET を使用した C# Update Table

誰かが if(Page.IsPostBack) のページ読み込みにフォームの初期化を入れるのを忘れていましたが、dbase には何の問題もありませんでしたが、ステートメントで送信されたパラメーターは常にイベントでプリロードされていました...それでも迅速な回答に感謝します!

4

2 に答える 2

0

私が最後にこれに遭遇したとき、それは許可の問題でした。何らかの理由で、SQLサーバーは適切なエラーメッセージを返さず、代わりに、基になるテーブルが更新されていることを示していました...更新されていなくても。

web.configにあるものとまったく同じクレデンシャルを使用してSQLExpressインスタンスに接続します。次に、同じクエリを実行して、何が起こるかを確認します。

于 2011-04-18T15:46:37.353 に答える
-1

が 1 を返す場合は、おそらくどこかexecuteNonQueryで正常に更新されています。それ以外の場合は、例外がスローされるか、または が返されます。web.config で接続文字列を確認し、サイトが想定どおりのデータベースを指していることを確認します。0

更新

接続文字列の一部は、 localhost で名前がData Source=.\SQLEXPRESS付けられた SQL Server インスタンスに接続していることを意味するSQLEXPRESSため、プロジェクトを別のコンピューターにデプロイする場合、コンピューターに保存されている同じ .mdf ファイルには接続されなくなります。他のコンピューターの .mdf ファイルを使用します。ユーザー インスタンス データベースの操作と Server Management Studio からの接続の詳細については、次の MSDN ブログ記事を参照してください。

Management Studio での SQL Express ユーザー インスタンスへの接続

于 2011-04-18T15:42:03.500 に答える