2017-02-21 9 views
0

私はライブラリシステムを作っています。私は書籍の借用と返却に問題があります。私のテーブルをスキャンするC#mysql

私は本を借りて返却するステータスを変更して返すと、同じ本をもう一度借りて返すときに返品用メッセージのトラップを返します。

sql = "SELECT * FROM tbltransactionbooks WHERE fBarCodeNo LIKE '" + txtBARCODE_R.Text.Trim() + "%'"; 
cfgotcall.engageQuery(sql); 
if (cfgotcall.tbl.Rows[0]["fStatus"].ToString().Equals("Borrowed")) 
{ 
    txtTITLE_R.Text = cfgotcall.tbl.Rows[0]["fBookTitle"].ToString(); 
    txtAUTHOR_R.Text = cfgotcall.tbl.Rows[0]["fAuthor"].ToString(); 
    txtYEAR_R.Text = cfgotcall.tbl.Rows[0]["fBookYr"].ToString(); 
    txtACCNO_R.Text = cfgotcall.tbl.Rows[0]["fAccNo"].ToString(); 
    txtCALLNO_R.Text = cfgotcall.tbl.Rows[0]["fCallNo"].ToString(); 
    txtBARCODE_BR.Text = cfgotcall.tbl.Rows[0]["fBarcodeNo"].ToString(); 
    txtSEARCH.Text = cfgotcall.tbl.Rows[0]["fStudent"].ToString(); 
    txtReturnDate.Text = cfgotcall.tbl.Rows[0]["fBorrowDate"].ToString(); 
    txtIDNO.Text = cfgotcall.tbl.Rows[0]["fIDStudent"].ToString(); 
    txtLEVEL.Text = cfgotcall.tbl.Rows[0]["fLevel"].ToString(); 
} 
else 
{ 
    MessageBox.Show("Book already returned."); 
} 

何私はPICに私自身のコードでデバッグすることは、それだけで私のテーブルのfirst rowを読み込みtbltransactionbooksで行全体をスキャンしませんです。

33 123 NAME IT 2/20/2017 2/20/2017 [HISTORY OF] COMPUTERS: THE MACHINES WE THINK WITH Returned 
33 123 NAME IT 2/21/2017 2/21/2017 [HISTORY OF] COMPUTERS: THE MACHINES WE THINK WITH Borrowed 

[2]:ダウは私が私のテーブル内の行全体をスキャンする方法http://i66.tinypic.com/28ajgwg.jpg

?上記のコードがうまく見えない場合、私はどのようにして私がそれをきれいにすることができるかの提案を開いています。ありがとう

+1

本当にあなたの入力を消毒する必要があります。 – maniak1982

+0

申し訳ありませんが、私の最初のここでは、Googleで私の問題を見つけることができません。 – user3415509

+0

これはあなたの問題に関連していませんが、これは以下の回答です(結果の最初の行のみを読んでいます)。これは、誤ってSQLクエリーに入力されたテキストを読むことで、データベースを編集することができないという別の問題です。誰かがテキストボックス ';ドロップテーブルのユーザー。もしあなたがそのテーブルを持っていれば、あなたのデータベースはその命令を実行します。 – maniak1982

答えて

1

cfgotcall.tbl.Rows[0]最初の行を指します。

あなたはそれぞれの行を反復処理する必要があります

sql = "SELECT * FROM tbltransactionbooks WHERE fBarCodeNo LIKE '" + txtBARCODE_R.Text.Trim() + "%'"; 
cfgotcall.engageQuery(sql); 

foreach(var row in cfgotcall.tbl.Rows) 
{ 
    if (row["fStatus"].ToString().Equals("Borrowed")) 
    { 
    txtTITLE_R.Text = row["fBookTitle"].ToString(); 
    txtAUTHOR_R.Text = row["fAuthor"].ToString(); 
    txtYEAR_R.Text = row["fBookYr"].ToString(); 
    txtACCNO_R.Text = row["fAccNo"].ToString(); 
    txtCALLNO_R.Text = row["fCallNo"].ToString(); 
    txtBARCODE_BR.Text = row["fBarcodeNo"].ToString(); 
    txtSEARCH.Text = row["fStudent"].ToString(); 
    txtReturnDate.Text = row["fBorrowDate"].ToString(); 
    txtIDNO.Text = row["fIDStudent"].ToString(); 
    txtLEVEL.Text = row["fLevel"].ToString(); 
    } 
    else 
    { 
     MessageBox.Show("Book already returned."); 
    } 
} 

列名とSQLクエリにタイプミスによる実行時エラーを避けるために、あなたはLINQ to SQLEntity Frameworkを使用することができます。この方法で各行がオブジェクトに変換され、オブジェクトプロパティ\フィールドにアクセスして各列にアクセスできます。

0

あなたはテーブルの最初の行[0]にアクセスしています。 forループまたはforeachループを使用して、すべてを繰り返し処理する必要があります。

サイドノート:これは宿題だと思います。あなたがインターネットで完全な解決策を見つけたら、それはあなたに何の役にも立たないでしょう。コレクション/配列の仕組みや、ループを使ってコレクション/配列をトラバースする方法を理解してください。

タスクであなたを助けるためにチュートリアルのカップル:

https://msdn.microsoft.com/en-us/library/aa288462(v=vs.71).aspx

http://csharp.net-informations.com/collection/csharp-collection-tutorial.htm

+0

あなたはforeachを使用してデータベースを反復する方法のいくつかの例を投稿してください、私はそれを勉強しようとします。ちょうど例 – user3415509

+0

下記のKernelModeからの答えがあなたが探しているものです。 foreach(cfgotcall.tbl.Rowsのvar行)... –

+0

はい、それは遅すぎる宿題です、私は今でも私のキャリアの後半に反映されるので、私は学生として私に良いことはしません。私はちょうど悪いコードを分析し、それらを調整する – user3415509

0

最初の行は、使用アクセス最初の行のみのでチェックされている:

if (cfgotcall.tbl.Rows[0]...) 

は、すべての行をチェックするため、またはのforeachループを使用して、いずれかcfgotcall.tbl.Rowsコレクションを反復処理します。

関連する問題