Я сохранил процедуру в моей SQL серверной базе данных, которая принимает несколько параметров, один из которых является входным и выходным параметром.
Это код, который я использую:
using (SqlConnection sqlConnection = new SqlConnection(globals))
using (var sqlCommand = new SqlCommand("addNewOrder", sqlConnection))
{
sqlCommand.CommandType = CommandType.StoredProcedure;
sqlCommand.Parameters.Add("@SomeDataA", SqlDbType.Int).Value = _someDataA;
sqlCommand.Parameters.Add("@SomeDataB", SqlDbType.Int).Value = _someDataB;
sqlCommand.Parameters.Add("@SomeDataC", SqlDbType.Float).Value = _someDataC;
sqlCommand.Parameters.Add("@InputAndOutput", SqlDbType.VarChar).Value=_inputAndOutput;
sqlCommand.Parameters["@InputAndOutput"].Direction = ParameterDirection.InputOutput;
using (var sqlAdapter = new SqlDataAdapter(sqlCommand))
try
{
sqlConnection.Open();
sqlCommand.ExecuteNonQuery();
if (!DBNull.Value.Equals(sqlCommand.Parameters["@InputAndOutput"].Value))
{
_inputAndOutput = sqlCommand.Parameters["@InputAndOutput"].Value.ToString();
}
else
{
_inputAndOutput = "N/A";
}
}
catch (SqlException ex)
{
MessageBox.Show(ex.Message);
}
catch (Exception exx)
{
MessageBox.Show(exx.Message);
}
}
return _inputAndOutput;
}
На SQL сервере в хранимой процедуре параметр @InputAndOutput
объявляется как @InputAndOutput varchar(36) = NULL OUTPUT
.
Когда хранимая процедура получает данные, она вставляется в базу данных и возвращает Uniqueidentifier
в этом @InputAndOutput
параметр.
Это все работает, если я ничего не отправляю с @InputAndOutput
.
Например, это будет прекрасно работать:
sqlCommand.Parameters.Add("@InputAndOutput", SqlDbType.UniqueIdentifier).Direction = ParameterDirection.Output;
Проблема в том, что я отправляю 1 символ хранимой процедуры, он вернет только 1 символ из 36 символов. Если я отправлю 2, он вернет 2 и так далее ...
Пример:
_inputAndOutput= "2" -> SP
(SP insert into DB, and returns "D00896A4-69D5-4FAC-B249-9409A643966A") -> _inputAndOutput
_inputAndOutput = "D"
В случае, если я отправлю 22, он получит "D0"