выполнение скаляра против оператора вставки - PullRequest
0 голосов
/ 14 июля 2011

Я пытаюсь получить идентификатор для последней записи, которую я вставил в таблицу базы данных через мой сайт asp.net.
Моя вставка является хранимой процедурой, я пробовал использовать скалярную функцию, но онадавая мне это Указанное приведение неверно.

Это оператор вставки, который я использую:

@ClientID varchar(250),
@BType varchar(250),
@CIP varchar(50),
@Sess varchar(500),
@LoggedIn int,
@LoggedInTime datetime

AS
BEGIN
    INSERT INTO tblSession ( ClientID, BType, CIP, Sess, LoggedIn, LoggedInTime) VALUES ( @ClientID, @BType, @CP,@Sess, @LoggedIn, @LoggedInTime) 
    SELECT SCOPE_IDENTITY()
END

И метод, который я вызываю:

 using (SqlConnection con = DBConnection.getConnection())
 {
    string sql = "Add";
    SqlCommand command = new SqlCommand(sql, con);
    command.CommandType = CommandType.StoredProcedure;

    command.Parameters.Add("@ClientID ", SqlDbType.VarChar).Value = id;
    command.Parameters.Add("@BType", SqlDbType.VarChar).Value = bt;
    command.Parameters.Add("@CIP", SqlDbType.VarChar).Value = cip;
    command.Parameters.Add("@Sess", SqlDbType.VarChar).Value = s;
    command.Parameters.Add("@LoggedIn", SqlDbType.Int).Value = LoggedIn;
    command.Parameters.Add("@LoggedInTime", SqlDbType.DateTime).Value = session.LoggedInTime;

    int x;
    x = (int)command.ExecuteScalar();
    return x;
 }

пожалуйста, любая помощь очень ценится

Ответы [ 3 ]

1 голос
/ 14 июля 2011

Создайте выходной параметр в хранимой процедуре и в коде C # и просто выполнитеNonQuery

0 голосов
/ 14 июля 2011

Я нашел пример на MSDN , который, я думаю, может вам помочь, потому что он, похоже, решает ситуацию, подобную вашей. В примере он использует только запрос, а не хранимую процедуру, но, возможно, может помочь. Скалярный запрос всегда возвращает значение или NULL, если нечего возвращать. Вы уверены, что ваша вставка работает? Возможно, он возвращает NULL, потому что вставка не удалась.

static public int AddProductCategory(string newName, string connString)
{
    Int32 newProdID = 0;
    string sql =
        "INSERT INTO Production.ProductCategory (Name) VALUES (@Name); "
        + "SELECT CAST(scope_identity() AS int)";
    using (SqlConnection conn = new SqlConnection(connString))
    {
        SqlCommand cmd = new SqlCommand(sql, conn);
        cmd.Parameters.Add("@Name", SqlDbType.VarChar);
        cmd.Parameters["@name"].Value = newName;
        try
        {
            conn.Open();
            newProdID = (Int32)cmd.ExecuteScalar();
        }
        catch (Exception ex)
        {
            Console.WriteLine(ex.Message);
        }
    }
    return (int)newProdID;
}
0 голосов
/ 14 июля 2011

Я абсолютно не уверен, понимаю ли я вашу проблему, но звонок должен быть

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