2011-04-21 70 views
1

我在C#中有一個應用程序,當它的一部分工作是將所有數據從Excel文件插入數據庫。調用帶參數的撇號存儲過程不起作用

從Excel中獲取數據的工作是正常的,我正在使用存儲過程將數據插入數據庫中的表中。

SET ANSI_NULLS ON 
GO 
SET QUOTED_IDENTIFIER ON 
GO 
ALTER Procedure [dbo].[sp_Insert] 

@id int, 
@brand nvarchar(50), 
@model nvarchar(50), 
@prodNumber nvarchar(50), 
@category nvarchar(50), 
@local nvarchar(50) 

AS 
INSERT INTO Tbl_Registos (ID, Brand, Model, [Product Number], Category, Local) 
VALUES (@id, @brand, @model, @prodNumber, @category, @local) 

這是當SP完美的作品一個例子:

sp_Insert N'1', N'Brand example', N'ABC123', N'123456-7890', 
      N'Laptop', N'18' 

問題是當我有這樣的情況:

sp_Insert N'1', N'Brand example', N'ABC123', N'123456-7890', 
      N'Laptop', N'Director's floor' 

當我有這個'在中間爭論。我想用引號[],但在有整數的情況下,我不能把它們放在引號之間。

從Excel中獲得一行後,我使用循環將參數放入查詢字符串中。

+2

我知道你有一個公認的答案已經那肯定會的工作,但我很希望看到你是如何調用該SP。如果您針對SqlCommand對象使用參數,則會自動處理轉義。你並不真的想開始承擔逃避論據的責任,你不需要。 – 2011-04-21 05:01:13

+0

您應該避免使用'sp_'前綴命名存儲過程 - SQL Server將在您的實際數據庫之前在主數據庫中搜索此類過程,因此如果MS稍後添加新的'sp_'過程,您的調用代碼將會被破壞。 – 2011-04-21 06:47:44

+0

感謝提示特洛伊;) – Miguel 2011-04-22 15:31:06

回答

2

你可以通過在其前面放置'另一個'來逃避'輸入',並且插入將起作用。你可以做到這一點或解析這些字符的數據並忽略它們。所以用這個INSERT語句中逃脫是:

sp_Insert N'1', N'Brand example', N'ABC123', N'123456-7890', N'Laptop', N'Director''s floor'