2013-03-28 27 views
0

我試圖通過我的.net代碼執行以下查詢,但它給了我錯誤,錯誤附近」。但是當我在Sql Server中執行此查詢它正常工作。錯誤附近「.net中

select 
    s.CurrentDate, 
    s.game_id, 
    s.Searchstring, 
    sm.type_of_game, 
    case 
     when(count(ISNULL(t.game_id, 0))>0) then 'Y' else 'N' 
    end as scorestatus, 
    case 
     when(count(isnull(i.game_id,0))>0) then 'Y' else 'N' 
    end as scorestatusindividual, 
    sm.image_path, 
    g.datetime, 
    '' as score_keeper 
from 
    dbo.Search s with(nolock) 
    left outer join dbo.TeamGameResult t with(nolock) 
     on s.game_id=t.game_id 
    left outer join dbo.IndividualGameResult i with(nolock) 
     on i.game_id=s.game_id 
    join dbo.Game g with(nolock) 
     on g.game_id=s.game_id 
    join dbo.AdditionalDetails ad 
     on ad.AdditionalDetails_id=g.AdditionalDetails_id 
    join dbo.SportMaster sm with(nolock) 
     on sm.SportsMaster_id=ad.SportsMaster_id 
where 
    (
     ( 
      Searchstring+' '+ convert(nvarchar(10),s.CurrentDate,101) Like '%01/15/2013%' 
      and Searchstring+' '+ convert(nvarchar(10),s.CurrentDate,101) Like '%Soccer%' 
     ) 
    ) 
    and convert(varchar(10),g.datetime,101) in ('01/15/2013','01/14/2013') 
group by 
    s.game_id, 
    s.Searchstring, 
    sm.type_of_game, 
    s.CurrentDate, 
    sm.image_path, 
    g.datetime 
order by 
    g.datetime desc 

.NET代碼 這裏我已創建的字符串並把它傳遞到fetchsearchrecordsbydate()方法。 在這裏輸入代碼

for (int i = 0; i < strSearchstring.Length; i++) { 

    if (i == strSearchstring.Length - 1) { 

     Searchstring = strcondition + " Searchstring+'' ''+  convert(nvarchar(10),s.CurrentDate,101) Like ''%" + strSearchstring[i].ToString() + "%'')"; 
    } else { 
     Searchstring = strcondition + " Searchstring+'' ''+ convert(nvarchar(10),s.CurrentDate,101) Like ''%" + strSearchstring[i].ToString() + "%'' and";     
    } 

public static DataTable fetchsearchrecordsbydate(string strSearchString, string strUserid, string strdate) { 

    try { 
     Database db = DatabaseFactory.CreateDatabase(); 
     DbCommand dbcmd = db.GetStoredProcCommand("spFetchRecordsFromdate"); 
     db.AddInParameter(dbcmd, "Searchstring", DbType.String, strSearchString); 
     db.AddInParameter(dbcmd, "userid", DbType.Int32,Convert.ToInt32(strUserid)); 
     db.AddInParameter(dbcmd,"date",DbType.DateTime,Convert.ToDateTime(strdate)); 
     DataSet dsSearchResult = db.ExecuteDataSet(dbcmd); 
     return dsSearchResult.Tables[0]; 

    } catch (Exception ex) { 
     throw ex; 
    } 
} 

Searchstring=((Searchstring+' '+ convert(nvarchar(10),s.CurrentDate,101) Like '%01/15/2013%' and Searchstring+' '+ convert(nvarchar(10),s.CurrentDate,101) Like '%Soccer%')) 

這是我的生成字符串。 但它給了我錯誤,錯誤附近「。它在sql中正常工作,但在錯誤中.net

+2

向我們展示c#中的代碼# – 2013-03-28 06:42:25

+0

如何在.net代碼中使用它? – Dima 2013-03-28 06:43:44

+0

Database db = DatabaseFactory.CreateDatabase(); DbCommand dbcmd = db.GetStoredProcCommand(「spFetchRecordsFromTable」); db.AddInParameter(dbcmd,「Searchstring」,DbType.String,strSearchString); db.AddInParameter(dbcmd,「userid」,DbType.Int32,Convert.ToInt32(strUserid)); db.AddInParameter(dbcmd,「date」,DbType.DateTime,Convert.ToDateTime(strdate)); DataSet dsSearchResult = db.ExecuteDataSet(dbcmd); – Trupti 2013-03-28 06:50:36

回答

1

由於某些未知原因,你在你的c#字符串結構中的單引號字符加倍(像'' '')如果你正在構建的串起來SQL(因爲在SQL中,字符串分隔符是'),它不是在C#需要

雖然這將是必要的還是做如:

Searchstring = strcondition + " Searchstring+' '+  convert(nvarchar(10),s.CurrentDate,101) Like '%" + strSearchstring[i].ToString() + "%')"; 

另外,如果添加第一個(或最後一個)動態條件,則避免必須解決的常見方法是在應用其他條件的循環之外始終包含1=1條件,該條件是您首先/最後追加的條件。