繁体   English   中英

从C#调用我的存储过程时出错

[英]Getting an error calling my stored procedure from c#

我有一个在SQL中工作的存储过程:

ALTER PROCEDURE [dbo].[sp_fetch_journal_search]
    -- Add the parameters for the stored procedure here
    @sJournalText nvarchar(250) OUT,
    @dJournalDate date OUT,
    @sJournalTime nvarchar(250) OUT,
    @sJournalImageName nvarchar(250) OUT,
    @sJournalWebsite nvarchar (250) OUT,
    @iJournalID int OUT,
    @iJournalEntryID int OUT,
    @sSearch nvarchar(250)
AS
BEGIN           
    -- SET NOCOUNT ON added to prevent extra result sets from
    -- interfering with SELECT statements.
    SET NOCOUNT ON;

    select  @dJournalDate = journal_date, 
            @sJournalTime = journal_time, 
            @sJournalImageName = journal_text, 
            @sJournalImageName= image_name, 
            @sJournalWebsite = website,
            @sJournalText = journal_text,
            @iJournalEntryID = journal_entry_id,
            @iJournalID = journal_id 
    from journalview
    where journal_date like '%' + @sSearch + '%'
    or journal_time like '%' + @sSearch + '%'
    or journal_text like '%' + @sSearch + '%'
    or image_name like '%' + @sSearch + '%'
    or website like '%' + @sSearch + '%'
    group by journal_date, journal_time, journal_text, image_name, website, journal_id,journal_entry_id 

当我从c#调用它时,我在ExecuteReader命令上收到一个错误,提示int与日期不兼容。 我看不出有什么问题:

SqlCommand cmdFetchJournal = new SqlCommand();
cmdFetchJournal.Connection = ConnectData.connection;
cmdFetchJournal.CommandText = "sp_fetch_journal_search";
cmdFetchJournal.CommandType = CommandType.StoredProcedure;
cmdFetchJournal.Parameters.AddWithValue("sSearch", (sSearch != null ? sSearch : ""));
cmdFetchJournal.Parameters["sSearch"].Direction = ParameterDirection.Input;
cmdFetchJournal.Parameters.AddWithValue("sJournalText", SqlDbType.VarChar);
cmdFetchJournal.Parameters["sJournalText"].Direction = ParameterDirection.Output;
cmdFetchJournal.Parameters.AddWithValue("dJournalDate", SqlDbType.Date);
cmdFetchJournal.Parameters["dJournalDate"].Direction = ParameterDirection.Output;
cmdFetchJournal.Parameters.AddWithValue("sJournalTime", SqlDbType.VarChar);
cmdFetchJournal.Parameters["sJournalTime"].Direction = ParameterDirection.Output;
cmdFetchJournal.Parameters.AddWithValue("sJournalWebsite", SqlDbType.VarChar);
cmdFetchJournal.Parameters["sJournalWebsite"].Direction = ParameterDirection.Output;
cmdFetchJournal.Parameters.AddWithValue("sJournalImageName", SqlDbType.VarChar);
cmdFetchJournal.Parameters["sJournalImageName"].Direction = ParameterDirection.Output;
cmdFetchJournal.Parameters.AddWithValue("iJournalID", SqlDbType.Int);
cmdFetchJournal.Parameters["iJournalID"].Direction = ParameterDirection.Output
cmdFetchJournal.Parameters.AddWithValue("iJournalEntryID", SqlDbType.Int);
cmdFetchJournal.Parameters["iJournalEntryID"].Direction = ParameterDirection.Output;
SqlDataReader drFetchJournal = cmdFetchJournal.ExecuteReader();

所有帮助,不胜感激。

我只是注意到这些是output ,因此您需要使用Add方法而不是AddWithValue 我将把剩下的答案留作参考。

出现此问题的原因是,您没有为Parameters.AddWithValue()调用提供值。 所以当你打电话

Parameters.AddWithValue("dJournalDate", SqlDbType.VarChar);

您正在将值设置为SqlDbType.VarChar ,该值可能是1 如果您将其更改为

Parameters.AddWithValue("dJournalDate", yourDate);

你应该没事的。 这也适用于所有其他Parameters.AddWithValue()调用。

您的问题是这一行:

cmdFetchJournal.Parameters.AddWithValue("dJournalDate", SqlDbType.VarChar);

dJournalDate是一个日期,但是您试图传递VarChar。 更改为此:

cmdFetchJournal.Parameters.AddWithValue("dJournalDate", SqlDbType.Date);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM