1

これを実行しようとすると、次のエラー メッセージが表示されます。

varchar 値 'category_id' をデータ型 int に変換するときに変換に失敗しました。

これが私のSQLとパラメータコードです。うまくいくはずですが、うまくいきません。

mycmd.CommandText="SELECT * FROM categories WHERE @db_property = @property_id"; 

// This contains a string "category_id", which is correct.
mycmd.Parameters.Add("@db_property", SqlDbType.VarChar).Value=db_property_field; 

// This contains an Int, referring to the category_id in database. As of now, this is 1
mycmd.Parameters.Add("@property_id", SqlDbType.Int).Value=property_id; 

このコードを実行した後、Reader で実行すると、上記のエラー メッセージが表示されます。先生や私のクラスの優秀な生徒たちに尋ねてきましたが、問題がどこにあるのか、誰も手がかりを見つけることができません.

4

5 に答える 5

6

フィールド名をパラメーターとして追加しないでください。実際のフィールド ID を含めるようにスクリプトを変更してみてください。

mycmd.CommandText = "SELECT * FROM categories WHERE category_id = @property_id";
mycmd.Parameters.Add("@property_id", SqlDbType.Int).Value = property_id;
于 2013-03-04T11:10:44.007 に答える
0

ステートメントを見ると、2つのパラメーターを比較しています。WHERE句はテーブル列(「カテゴリ」)になく、渡す2つのパラメータは異なるデータ型です。VarCharとInt。そのコマンドが実行されると、SQLエンジンは異なるデータ型の2つの変数を比較しようとします。

次のSQLステートメントをSQLに対して直接実行すると、同じエラーが発生します。

DECLARE @Var1 VARCHAR(100)
DECLARE @Var2 INT

SELECT @Var1 = 'Test', @Var2 = 1

SELECT * FROM dbo.categories  WHERE @Var1 = @Var2
于 2013-03-04T11:12:56.733 に答える
0

クエリは、渡した2つの変数と一致しているため、すべてのデータが返されるか、まったく返されません。その上、char変数をintと照合しています。SQLはchar変数をintにキャストしようとします。

@db_property = @property_id

クエリは次のようになりますか?

SELECT * FROM categories WHERE db_property = @db_property AND property_id = @property_id
于 2013-03-04T11:12:24.627 に答える
0

あなたの構造についてはよくわかりませんが、次のことを試してください。

mycmd.CommandText = "SELECT * FROM categories WHERE Cast(@db_property as Int) = @property_id";
于 2013-03-04T11:09:57.230 に答える
-1

次のアドレスからソリューションを取得できます。

http://net-informations.com/csprj/data-providers/cs-procedure-parameter.htm

参考までに、コードを再形成して、必要に応じて使用します。

ストアド プロシージャのコードは次のとおりです。

Create PROCEDURE [dbo].[PmSPValidate]
@a varchar(10)

AS
BEGIN
(SELECT AcctDsc,AcctAge 
FROM dbo.tblCoa 
WHERE AcctNo >= @a)

END

Code of C# :

 private void btnThirdTrial_Click(object sender, EventArgs e)
        {
            string connetionString = null;
            SqlConnection connection;
            SqlDataAdapter adapter;
            SqlCommand command = new SqlCommand();
            SqlParameter param;
            DataSet ds = new DataSet();

            int i = 0;

            connetionString = "Data Source=FIN03;Initial Catalog=CmsTest;Integrated Security=True";

            connection = new SqlConnection(connetionString);

            connection.Open();
            command.Connection = connection;
            command.CommandType = CommandType.StoredProcedure;
            command.CommandText = "dbo.PmSPValidate";

            param = new SqlParameter("@a",Account.Text.ToString ());
            param.Direction = ParameterDirection.Input;
            param.DbType = DbType.String;
            command.Parameters.Add(param);

            adapter = new SqlDataAdapter(command);
            adapter.Fill(ds);

            for (i = 0; i <= ds.Tables[0].Rows.Count - 1; i++)
            {
                MessageBox.Show(" Name " + ds.Tables[0].Rows[i][0].ToString() + "  Age " + ds.Tables[0].Rows[i][1].ToString());

            }

            connection.Close();

        }
于 2015-03-05T07:43:35.800 に答える