[英]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.