2011-02-01 31 views
0

OK。だから私はここに質問をする前に背景です。 私はちょうどASP.NETの開発段階に合格し、LOCALマシンで完全に機能するWebアプリケーションを作成しました。だから私はそれが必要なように実行されているかどうかを確認するために、操作するWindowsサーバー上に作成されたIIS Webfolderにファイルを転送します。します!奇妙な動作:ASP.NETからSQL Server

これは問題です。情報を入力すると、Button1をクリックしてポストバックを取得します。私のコードを見れば正常です。私は、SQL Server管理を使用してデータベースをチェックしてみると、それを見た.....何もそこにいた!

下記のコードとともにこの問題を解決するために役立ついくつかの詳細を以下に示します。

細目:

  • のWindows Server 2003
  • SQL Server 2005の
  • .NET Frameworkは2.0
  • IIS 6マークアップが正しいてtextBox名で期待されているよう

とすべて

C#コード:

protected void Button1_Click(object sender, EventArgs e) { 
    SqlConnection connection = new SqlConnection(@"Data Source=myServerName;Initial Catalog=myDatabaseName;Integrated Security=True"); 

    SqlCommand cmd = new SqlCommand("insert into [PATIENT]([MRN], [PFNAME], [DOB]) " 
        + " Values(@MRN, @PFNAME, @DOB)", connection); 

    cmd.Parameters.AddWithValue("@MRN", int.Parse(MRNTextBox.Text)); 
    cmd.Parameters.AddWithValue("@PFNAME", NameTextBox.Text); 
    cmd.Parameters.AddWithValue("@DOB", DOBTextBox.Text); 

    connection.Open(); 
    cmd.ExecuteNonQuery(); 
    cmd.Connection.Close(); 
} 

これはコードです。エラーメッセージが表示されないため、どこに問題があると推測することができませんでした。詳細が必要な場合はお知らせください。私は喜んで提供します。

P.S.私は、ASP.NET開発サーバーではなく、IISを介してWebサイトを実行しています(既に言及していない場合は、VSからブラウザの「ブラウザで表示」を実行するとわかります)。

私が助けをすべてに感謝したいと思います。私はあなたの提案のほとんどを踏襲し、私は後に、私は新しい問題を見つけ出すことを願っています(ログインエラー例外を取得し、YAYを!!)私が使用することができるようになります

EDIT

実際にあなたのコメントがあります。あなたは私がばかだと思うでしょう(私は今のところ気に入っています)。しかし、変更を見ることができなかった理由は、C#コードを作成していないためでした。私はマークアップを変更したときにいつでもそれが表示されたのでコンパイルしていました ウェブ。私はVisual Studioがコードを自動的にコンパイルするのを忘れてしまったので「ブラウザで見る」ことに慣れていた(私は思う)。

+1

最高のあなたは、コード、XMLまたはデータサンプルを投稿する場合は、** **テキストエディタでこれらの行をハイライト表示し、「コードサンプル」ボタンをクリックしてください({})に、エディタのツールバー上うまくフォーマットと構文が強調表示されます! –

+1

コードをステップ実行してデバッグできますか?データベースに接続していない可能性があります.SQLが間違っている可能性があります。渡される値は間違った形式になる可能性があります。 –

+0

@ -rene。いいえ、それは完全に運用されているSQLサーバー2005上にありません。@ -Devlin。私はVSからそれを実行していないので、私はできません。 Visual StudioはWindows Serverにインストールされていません。 .aspxファイルと.aspx.csファイルをローカルマシンから編集するだけです。 – GetRichSlow1

答えて

2

私が目指す最初のことは、最も簡単な方法は、トレースを追加することです。これにより、イベントが正しく配線され、イベントが正常に起動されます。トレースでボタンのクリックが発生しない場合は、UIに問題があり、それに集中できます。最も一般的なのは@ Pageディレクティブを正しく設定していないが、他にも潜在的な理由がある。

トラブルシューティングの次のステップは、可能であれば、ヒットしているサーバーをプロファイルすることです。うまくいけば、あなたは直接プロダクションにデプロイしておらず、これで遊ぶことができるステージング環境を持っているといいでしょう。

最後に、UIレイヤーから実際のデータコードをリファクタリングしてテスト可能な "リポジトリ"リポジトリパターンを使用していない - 引用符の理由)。コードをテストで囲み、コードが正しく動作することを確認できます。ライブラリが呼び出され、イベントが正しく配線されていることを確認するためにトレースする必要がありますが、懸念を分離することでデータアクセスコードの問題をよりよく処理できます。

さて、最終的なものではありません。あなたはあなたのコードから魔法の文字列を取り出し、それらが所属するconfigに移動する必要があります。ハードコーディング==悪いジュジュ。

希望すると便利です。

+0

あなたのイベントが発砲していない場合、それは確かにあなたが見ている動作を説明するでしょう。ところで、配線は代理人を介して行われます。 – Bryan

+0

.NET 2.0 Webサイトでは、別のファイルで配線を見つけることができます。 X + =イベントデリゲート行が表示されない場合、イベントは発生していません。これは間違いありませんが、コードを見てみる価値はあります。 –

+0

私は接続文字列をWeb設定ファイルに移動しました。同じ効果を得るには、接続名でConfigurationManagerを使用します。助けてもらえませんでしたが、答えを見つけました。 – GetRichSlow1

-1

LLBLGen Proのようにあなたはそれがデータベースへのアクセスに来るとき車輪の再発明をする必要はありません はORMを使用し、鈍いことができます。独自のDBアクセスを作成することで、コードの保守性を高め、バグの導入の機会を減らすことができます。

+0

正しいアドバイス@間違った時間。私はdownvoteしなかった。 – Pradeep

1

イベントが発生している可能性が高い場合は、統合セキュリティを使用する可能性が最も高い原因です。 ASP.NETプロセスは、個人ログインと同等ではないことに注意してください。統合されたセキュリティは、データベースにアカウントが明示的に与えられているアカウントまたはグループ(管理者など)を介してログオンし、データベースにアクセスしている場合にのみ機能します。ここで唯一の疑問は、接続しようとするとエラーがスローされない理由です。

IIS_IUSRSアカウントにデータベースへのアクセスを許可しないでください。これは問題の招待です。代わりに、ログイン文字列に適切で安全なパスワードを使用してSQL Serverアカウントを使用します。この方法では、データベースに関するIIS_IUSRSの状態について心配する必要はありません。

は明示的に接続を開いたり、コマンドを設定したり、パラメータを追加したりすることに飽き飽きしています。私は、商用ORMを採用することをお勧めします。軽量のデータアクセスレイヤーを使用して、多くの不快な作業を自動化します。

1

もっとも簡単な説明は間違ったDBを押すだけです。それ以外の場合は、いくつかのエラーが表示されます。あなたは静かに例外をキャッチしていないのですか?

+0

いいえ、私は例外を歓迎します。リースでは、それは正しい方向に多少私を向けるだろう。 – GetRichSlow1

0

コードは正常です。あなたはあなたの質問であなたが例外を取得していないと述べていますし、コードも動作していません。あなたがあなたのコードの中に黙って問題を引き起こしている場合は、少なくともあなたが何か例外を捕まえるように、これを試すことができるかもしれません。

WebプロジェクトにGlobal.asaxファイルを追加し、Application_Errorイベントを追加します。下記の署名はこれがWebプロジェクト内の任意の例外をキャッチする一つのイベント、その例外は、プロジェクトで発生していない問題であり、同じ

protected void Application_Error(object sender, EventArgs e) 
{ 
} 

ためのものです。ブレークポイントにヒットしたら、送信者オブジェクトでAllErrorsコレクションを確認します。下記のコードはあなたに役立ちます

(sender as HttpApplication).Context.AllErrors[0] 

あなたのコードに何らかの誤りがある場合、このイベントを通過できません。それは間違いなくここに捕らえられるでしょう。

すべて