我有一个在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与date不兼容。我看不出有什么问题:
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();
非常感谢。
答案 0 :(得分:1)
我刚才注意到这些是output
,因此您需要使用Add
方法而不是AddWithValue
。我将把这个答案的其余部分作为参考。
您遇到此问题的原因是您没有提供Parameters.AddWithValue()
电话的价值。所以当你打电话时
Parameters.AddWithValue("dJournalDate", SqlDbType.VarChar);
您将值设置为SqlDbType.VarChar
,可能是1
。如果您将其更改为
Parameters.AddWithValue("dJournalDate", yourDate);
你应该没事。这适用于所有其他Parameters.AddWithValue()
来电。
答案 1 :(得分:0)
你的问题就在这一行:
cmdFetchJournal.Parameters.AddWithValue("dJournalDate", SqlDbType.VarChar);
dJournalDate
是一个日期,但您正在尝试传入一个VarChar。将其更改为:
cmdFetchJournal.Parameters.AddWithValue("dJournalDate", SqlDbType.Date);