在做一個小項目的時候遇到一個很糾結的問題。這裏和大家分享一下 ,希望對有同樣問題的朋友有所幫助
問題:有如下一個複雜查詢
在三層架構中這是一個讓人很糾結的問題,最終覺得把界面層所有參數都封裝到一個實體類中,傳遞三個實體類作參數,
''' <summary>
''' 組合查詢條件實體
''' </summary>
Public Class Condition
''' <summary>
''' 字段名
''' </summary>
Private m_FileName As String
''' <summary>
''' 操作符
''' </summary>
Private m_Operate As String
''' <summary>
''' 字段值
''' </summary>
Private m_FileValue As String
''' <summary>
''' 關係符
''' </summary>
Private m_Relation As String
''' <summary>
''' 字段名
''' </summary>
Public Property FileName() As String
Get
Return m_FileName
End Get
Set(ByVal Value As String)
m_FileName = Value
End Set
End Property
''' <summary>
''' 操作符
''' </summary>
Public Property Operate() As String
Get
Return m_Operate
End Get
Set(ByVal Value As String)
m_Operate = Value
End Set
End Property
''' <summary>
''' 關係符
''' </summary>
Public Property Relation() As String
Get
Return m_Relation
End Get
Set(ByVal Value As String)
m_Relation = Value
End Set
End Property
''' <summary>
''' 字段值
''' </summary>
Public Property FileValue() As String
Get
Return m_FileValue
End Get
Set(ByVal Value As String)
m_FileValue = Value
End Set
End Property
End Class ' Condition
緊接着又有一個問題,想把sql語句查詢寫成存儲過程,一路坎坷,一些單引號,空格 很多小的問題很讓人頭疼,這裏把最終的解決方案分享一下。
ALTER PROCEDURE [dbo].[proc_Condition_Query]
@FileName1 varchar(10), @Operator1 varchar(1),@FileValue1 varchar(10),@Relation1 varchar(10),
@FileName2 varchar(10), @Operator2 varchar(1),@FileValue2 varchar(10),@Relation2 varchar(10),
@FileName3 varchar(10), @Operator3 varchar(1),@FileValue3 varchar(10),@InfoName varchar(10) 表的名稱
AS
DECLARE @TempSql varchar(500) --臨時存放sql語句
BEGIN
set @TempSql= 'select * from '+@InfoName+' where ' + @FileName1 + @Operator1 + char(39)+ @FileValue2+char(39)--拼接sql字符串,單引號用Assci值替代
if (@Relation1 is not null)
begin
if (@Relation2 is null)
begin
set @TempSql =@TempSql+space(1)+@Relation1+space(1)+@FileName2+space(1)+@Operator2+space(1) +char(39)+ @FileValue2+char(39)--操作符兩側的空格用Space(1)
解決
end
else
begin
set @TempSql =@TempSql+space(1)+@Relation1+space(1)+ @FileName2+space(1)+@Operator2+space(1) +char(39)+ @FileValue2+char(39)+space(1)+@Relation2+space(1)+ @FileName3+space(1)+@Operator3+space(1) +char(39)+
@FileValue3+char(39)
end
end
exec(@TempSql)
END
到這裏整個問題就解決完了,結果終於出現了
總結問題:其中不加單引號會出現以下問題