2016-03-25 13 views
1

特定の文字列のSQLテーブルを検索し、見つかった観測数を返します。文字列がテーブルにあるかどうかは、-1を返します。ここに私のコード:SQLテーブル内の文字列を検索できません

@{ 
    Layout = "~/_Layout.cshtml"; 
    Page.title = "TestArea"; 


    var db = Database.Open("Cafeen"); 
    string SearchWord = "Jolly"; 

    var msg = db.Execute("SELECT COUNT(*) FROM Products WHERE ProductName = @SearchWord"); 

} 

<p>@msg</p>  

私は多分COUNT(*)以外のものを使うべきでしょうか? -1の意義は何ですか?文字列が見つからない場合は、0を返す式を仮定しました。 db.ExecuteSqlCommand.ExecuteNonQueryにおいて

+0

にクエリ文を変更することをお勧め、あなたはありますか? – Nyerguds

+0

を試してくださいvar msg = db.Execute( "ProductName = '" + SearchWord + "'")から商品が選択された(* – Jamaxack

+1

@Jamaxack慎重にそこに。その文字列がユーザの入力である場合、あなたはBobby Tablesのシナリオを要求しています。 – Nyerguds

答えて

1

WebMatrix.Data名前空間を使用しています。このコンテキストでは、QuerySingleメソッドをExecuteメソッドと呼ぶべきではありません。すでに述べたように、メソッドが行データを返さないためです。

、この方法は、非クエリは、このようなSQL降下として、 データベース上でコマンドを実行するために使用される実行、作成、削除、更新、および コマンドを挿入します。

また、私はあなたが実際にそこを呼び出す)(db.ExecuteにSearchWord文字列を渡していない、よりパフォーマンスの高い1

var db = Database.Open("Cafeen"); 
string SearchWord = "Jolly"; 
string cmdText = @"IF EXISTS(SELECT 1 FROM Products 
          WHERE ProductName = @searchWord) 
         SELECT 1 ELSE SELECT 0"; 
int exists = Convert.ToInt32(db.QuerySingle(cmdText, SearchWord)); 
..... 
0

:UPDATE、INSERTについて

、およびDELETEステートメントは、戻り値はコマンドによって影響を受けた行の数です。挿入または更新される表にトリガーが存在する場合、戻り値には、挿入操作または更新操作の両方によって影響を受ける行数と、トリガーの影響を受ける行数が含まれます。 SELECTのような他の種類の文の場合、戻り値は-1です。ロールバックが発生した場合、戻り値も-1になります。

は、以下のリンクを見ては役立つかもしれない持っている:

SQLデータベースに関連する

https://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlcommand.executenonquery.aspx

How to Identify whether SQL job is successfully executed or not in C#

0

、そこにある:

SqlCommand.ExecuteScalar Method() 

(再: https://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlcommand.executescalar(v=vs.110).aspx

そうでない場合に、Database.QueryValue方法を指す(RE:https://msdn.microsoft.com/en-us/library/webmatrix.data.database.queryvalue(v=vs.111).aspx

両方の方法は、最初の列/最初の行からのスカラー値を返します。

また、SQL文でCOUNT(*)の代わりにCOUNT(1)を使用すると、パフォーマンスが向上します。

これが役に立ちます。

+0

OPは 'WebMatrix'から' Database'クラスを使用しています。 – niksofteng