2011-04-21 135 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'