0

すべての操作でデータベースに値を追加する方法があります。

これがデータベースから選択され、この選択がデータベースからより多くの行を返す場合、行を取得して配列に格納するにはどうすればよいですか?

これはメソッドコードです:

public void ExcuteProcedure(string procName, List<SqlParameter> procparams)
{
            try
            {
                SqlConnection mycon = new SqlConnection(connectionString);
                mycon.Open();
                SqlCommand mycom = new SqlCommand();
                mycom.Connection = mycon;
                mycom.CommandText = procName;
                mycom.CommandType = CommandType.StoredProcedure;
                foreach (var item in procparams)
                {
                    SqlParameter myparm = new SqlParameter();
                    myparm.ParameterName = item.ParameterName;
                  //  myparm.SqlDbType = item.SqlDbType;
                    myparm.Value = item.Value;
                    mycom.Parameters.Add(myparm);
                }
              var n= mycom.ExecuteScalar();

                mycon.Close();
            }
            catch (SqlException e)
            {
                Console.WriteLine("Error Number is : " + e.Number);
                Console.WriteLine("Error Message is : " + e.Message);
            }
}
4

3 に答える 3

7

を呼び出す必要があります。これにより、結果を読み取ることができるmycom.ExecuteReader()が得られます。SqlDataReader

Read()行を進めるために呼び出します。

于 2013-01-18T17:00:40.720 に答える
2

開発者が単純なデータベース接続を抽象化しようとしているのを何度も目にすることに驚かされます。そして、彼らが必然的にそれを台無しにする無数の方法。

以下は意地悪に聞こえるかもしれませんが、言う必要があります: コードをクリーンアップすると、ふるいのように漏れます。接続オブジェクトとコマンド オブジェクトの周りに句を使用することは、ほぼ必須です。現状では、単一のパラメーターを忘れたり、不適切な値を入力したりすると、接続がリークします。接続プールがいっぱいになると、アプリはあらゆる種類の興味深い方法でクラッシュし、通常はデバッグが困難になります。

次に、データベースからレコードを適切に取得する方法がわからない場合は、プロシージャを呼び出すコードを抽象化しようとするべきではありません。Dapperのような軽量の ORM を使用するか、プロジェクトの次の開発者が取り除こうとする無関係なコードが最終的にどのように含まれるかを学習します。

/うそつき。

質問ExecuteScalarに戻ります。単一の値を返します。を使用する必要がありますExecuteReaderdatatable単にリーダーの結果を取得し、それを に詰め込み、それを呼び出し元のコードに戻すことをお勧めします。

于 2013-01-18T17:07:56.047 に答える
0
var n = mycom.ExecuteScalar();

スカラー: 一度に 1 つの値しか保持できない原子量

  • DataReader代わりにa を返し、その行を反復処理します
  • aDataSetを使用して a に入力しDataAdapterます (結果セットに複数のテーブルがある場合は、これがより適切です)。
于 2013-01-18T17:01:05.810 に答える