Столкновение с типом операнда: int несовместимо с uniqueidentifier - PullRequest
4 голосов
/ 20 августа 2010

Я получаю SQLException "Столкновение типа операнда: int несовместимо с uniqueidentifier" когда я пытаюсь выполнить следующую хранимую процедуру из кода C #.

create proc sp_Get_Allfields_Account_Public
@username varchar(20),
@password varchar(20),
@acc_num UniqueIdentifier out,
@cust_name varchar(20) out,
@balance float out
as
select @acc_num=acc_num,@cust_name=cust_name,@balance=balance from Account_Public where username=@username and password=@password

C # код выглядит следующим образом

cmd = new SqlCommand("sp_Get_Allfields_Account_Public", con);
               cmd.CommandType = CommandType.StoredProcedure;

               // Add Input Parameters
               cmd.Parameters.AddWithValue("@username", username);
               cmd.Parameters.AddWithValue("@password", password);   

               // Add output parameters
               cmd.Parameters.AddWithValue("@acc_num", SqlDbType.UniqueIdentifier);
               cmd.Parameters["@acc_num"].Direction = ParameterDirection.Output;

               cmd.Parameters.AddWithValue("@cust_name", SqlDbType.VarChar);
               cmd.Parameters["@cust_name"].Direction = ParameterDirection.Output;

               cmd.Parameters.AddWithValue("@balance", SqlDbType.Float);
               cmd.Parameters["@balance"].Direction = ParameterDirection.Output;

               cmd.ExecuteNonQuery();

Определение таблицы

create table Account_Public
(
acc_num uniqueidentifier,
cust_name varchar(20),
username varchar(20),
password varchar(20),
balance float
)

Ответы [ 2 ]

10 голосов
/ 20 августа 2010

Это потому, что вы вызываете AddWithValue, а затем передаете значение как enum (которое интерпретируется как int).

cmd.Parameters.AddWithValue("@acc_num", SqlDbType.UniqueIdentifier); 

Используйте другой метод (вероятно, просто Add).

0 голосов
/ 20 августа 2010

Это может показаться немного избыточным, но вы уверены, что тип данных столбца [Account_Public].[acc_num] на самом деле uniqueidentifier, а не int?

Попробуйте вместо этого:

cmd = new SqlCommand("select @acc_num=acc_num,@cust_name=cust_name,@balance=balance from Account_Public where username=@username and password=@password", con);
cmd.CommandType = CommandType.Text;

с такими же параметрами.Вы получаете ту же ошибку?

Кроме того, я настоятельно рекомендую указать явные размеры для всех параметров char.Это не так важно для входных параметров, но очень важно для выходных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...