1

Тема: C# & MS SQL. Як передати дані DateTimePicker в збережену процедуру?

Здорів, значить є така процедурка,

USE [library]
GO
/****** Object:  StoredProcedure [dbo].[SP_GiveBookToUser]    Script Date: 22.09.2013 14:23:28 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author:        <Author,,Name>
-- Create date: <Create Date,,>
-- Description:    <Description,,>
-- =============================================
ALTER PROCEDURE [dbo].[SP_GiveBookToUser]
    
    @BookId numeric(18),
    @UserId numeric(18),
    @DateOff date

AS
BEGIN
    -- SET NOCOUNT ON added to prevent extra result sets from
    -- interfering with SELECT statements.
    SET NOCOUNT ON;

    
        if (select number from book where id = @BookId)>0
        begin
        insert into BookAndUser (book_id,user_id,dateOn,dateOff) 
        values
        (@BookId,@UserId,GETDATE(),@DateOff)
        update Book SET number=number-1 where id=@BookId
        end

END

І такий от кід, тобто код

 private void GiveBook()
        {
            SqlCommand comm = new SqlCommand("exec SP_GiveBookToUser "+tbBookId.Text+","+tbUserId.Text+",'"+
            dtp1.Value.Day+"-"+dtp1.Value.Month+"-"+dtp1.Value.Year+"'",cnn);
            try
            {
                cnn.Open();
                comm.ExecuteScalar();
                cnn.Close();
                MessageBox.Show("Вітаємо! Книгу видано!");
            }
            catch (Exception e)
            {
                MessageBox.Show(e.Message);
            }
        }

Ну ото якщо виконувати процедуру в SQL Server management'і, то date передається як "01-01-2000", я так само передавав дані з програмки, але мені постійно показує помилку
http://не-дійсний-домен/4xmHf.jpg
що порадите, панове?

2

Re: C# & MS SQL. Як передати дані DateTimePicker в збережену процедуру?

1.

if (select number from book where id = @BookId)>0

ЛК, що запахне, коли запит верне NULL. Натомість зробіть

if exists (select number from book where id = @BookId)

або

select number from book where id = @BookId
IF @@ROWCOUNT > 0

2. Почитайте мсдн на тему датачасу в мілкосервері: формат дати має бути 'YYYY-MM-DD'

3. Проблема стосується SQL, тому тему переношу до свого розділу.

3 Востаннє редагувалося smiler (01.10.2013 09:43:39)

Re: C# & MS SQL. Як передати дані DateTimePicker в збережену процедуру?

Вибаште, я висловлю своє фе

на багато симпатичніше виглядає якщо передавати параметри в процедуру наступним чином:

  SqlCommand comm = new SqlCommand("SP_GiveBookToUser",cnn);
  comm.CommandType = CommandType.StoredProcedure;
  comm.Parameters.AddWithValue("BookId", Convert.ToInt32(tbBookId.Text));//перед конвертом можна провести валідацію
  comm.Parameters.AddWithValue("UserId", Convert.ToInt32(tbUserId.Text));
  comm.Parameters.AddWithValue("DateOff", dtp1.Value);
  try
  {
    cnn.Open();
    comm.ExecuteNonQuery();
    cnn.Close();
    MessageBox.Show("Вітаємо! Книгу видано!");
    }
    catch (Exception e)
    {
      MessageBox.Show(e.Message);
    }