0

3 つの列 (EmpId、EmpName、EmpSalary) を持つテーブルがあります。準備済みステートメントを使用して、このテーブルからすべてのデータを取得しています。ここに私が書いたものがあります...

try
        {
            SqlCommand cmd = con.CreateCommand();
            cmd.CommandText = "SELECT EmpId,EmpName,EmpSalary FROM EmpDetails";

            SqlParameter paraId = new SqlParameter();
            paraId.ParameterName = "@id";
            paraId.SqlDbType = SqlDbType.Int;
            paraId.Size = 32;


            SqlParameter paraName = new SqlParameter();
            paraName.ParameterName = "@name";
            paraName.SqlDbType = SqlDbType.VarChar;
            paraName.Size = 50;

            SqlParameter paraSal = new SqlParameter();
            paraSal.ParameterName = "@sal";
            paraSal.SqlDbType = SqlDbType.Decimal;
            paraSal.Precision = 7;
            paraSal.Scale = 2;

            cmd.Parameters.Add(paraId);
            cmd.Parameters.Add(paraName);
            cmd.Parameters.Add(paraSal);

            con.Open();
            cmd.Prepare();
            SqlDataReader dr = cmd.ExecuteReader();
            string str = "";
            while(dr.Read())
            {
                string id = dr.GetInt32(0).ToString();
                string name = dr.GetString(1);
                string sal = dr.IsDBNull(2) ? "is null" : dr.GetDecimal(2).ToString();
                str += id + "\t" + name + "\t" + sal + "\n";
            }
            MessageBox.Show(str);

        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message);
        }
        finally
        {
            if (con.State == ConnectionState.Open)
                con.Close();
        }

しかし、次のようなエラーが表示されます。

私はここで何の間違いをしていますか..??

4

2 に答える 2

1

をご利用くださいcmd.Parameters.AddWithValue()。の使用cmd.Parameters.Add()は非推奨です。Google でその用途を調べてください :-)

于 2013-01-01T06:28:33.120 に答える
0

コードを確認しました。以下のようなパラメーター値を指定する必要があります。

        try
        {

            SqlCommand cmd = con.CreateCommand();
            cmd.CommandText = "SELECT EmpId,EmpName,EmpSalary FROM EmpDetails ";

            SqlParameter paraId = new SqlParameter();
            paraId.ParameterName = "@id";
            paraId.SqlDbType = SqlDbType.Int;
            paraId.Size = 32;


            SqlParameter paraName = new SqlParameter();
            paraName.ParameterName = "@name";
            paraName.SqlDbType = SqlDbType.VarChar;
            paraName.Size = 50;

            SqlParameter paraSal = new SqlParameter();
            paraSal.ParameterName = "@sal";
            paraSal.SqlDbType = SqlDbType.Decimal;
            paraSal.Precision = 7;
            paraSal.Scale = 2;

            //i assume you forgot to setup parameter values.

            paraId.Value = 1;
            paraName.Value = "thisName";
            paraSal.Value = 343;


            cmd.Parameters.Add(paraId);
            cmd.Parameters.Add(paraName);
            cmd.Parameters.Add(paraSal);

            con.Open();
            cmd.Prepare();
            SqlDataReader dr = cmd.ExecuteReader();
            string str = "";
            while (dr.Read())
            {
                string id = dr.GetInt32(0).ToString();
                string name = dr.GetString(1);
                string sal = dr.IsDBNull(2) ? "is null" : dr.GetDecimal(2).ToString();
                str += id + "\t" + name + "\t" + sal + "\n";
            }
            MessageBox.Show(str);

        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message);
        }
        finally
        {
            if (con.State == ConnectionState.Open)
                con.Close();
        }
于 2013-01-01T07:23:11.643 に答える