Sql server 插入包含撇号的值时出错
我对SQL Server 2008中的Sql server 插入包含撇号的值时出错,sql-server,sql-server-2008,Sql Server,Sql Server 2008,我对SQL Server 2008中的text数据类型非常陌生 我创建了一个表: CREATE TABLE sample(id int identity,name varchar(20),Yell_Your_self text) 但我面临着插入的问题 insert into sample values('ganesh','welcome to india') insert into sample values('ganesh','welcome to india's largest temp
text
数据类型非常陌生
我创建了一个表:
CREATE TABLE sample(id int identity,name varchar(20),Yell_Your_self text)
但我面临着插入的问题
insert into sample values('ganesh','welcome to india')
insert into sample values('ganesh','welcome to india's largest temple')
第一条语句工作正常,但如何执行第二条语句?试试这一条-
IF OBJECT_ID(N'dbo.sample') IS NOT NULL
DROP TABLE dbo.[sample]
CREATE TABLE dbo.[sample]
(
id INT IDENTITY(1,1) PRIMARY KEY
, name VARCHAR(20)
, Yell_Your_self VARCHAR(2000)
)
INSERT INTO dbo.[sample]
VALUES
('ganesh', 'welcome to india'),
('ganesh', 'welcome to india''s largest temple')
更新3:
public int get(string val1,string val2)
{
using(SqlConnection con = new SqlConnection(connectionString))
{
con.Open();
int i = 0;
using (SqlCommand cmd = new SqlCommand("INSERT INTO dbo.sample (name, Yell_Your_self) VALUES(@val1, @val2)", con))
{
cmd.Parameters.AddWithValue("@val1", val1);
cmd.Parameters.AddWithValue("@val2", val2);
i = cmd.ExecuteNonQuery();
}
con.Close();
return i;
}
}
试试这个-
IF OBJECT_ID(N'dbo.sample') IS NOT NULL
DROP TABLE dbo.[sample]
CREATE TABLE dbo.[sample]
(
id INT IDENTITY(1,1) PRIMARY KEY
, name VARCHAR(20)
, Yell_Your_self VARCHAR(2000)
)
INSERT INTO dbo.[sample]
VALUES
('ganesh', 'welcome to india'),
('ganesh', 'welcome to india''s largest temple')
更新3:
public int get(string val1,string val2)
{
using(SqlConnection con = new SqlConnection(connectionString))
{
con.Open();
int i = 0;
using (SqlCommand cmd = new SqlCommand("INSERT INTO dbo.sample (name, Yell_Your_self) VALUES(@val1, @val2)", con))
{
cmd.Parameters.AddWithValue("@val1", val1);
cmd.Parameters.AddWithValue("@val2", val2);
i = cmd.ExecuteNonQuery();
}
con.Close();
return i;
}
}
可能在印度字母表中的撇号上出现错误
insert into sample values('ganesh','welcome to india''s largest temple')
可能在印度字母表中的撇号上出现错误
insert into sample values('ganesh','welcome to india''s largest temple')
问题是字符串中有一个单引号,而单引号是SQL中的字符串分隔符 尝试:
问题是字符串中有一个单引号,而单引号是SQL中的字符串分隔符 尝试:
正如您已经意识到的那样,SQL面临的问题是在查询中避免撇号,我想这已经解决了。要回答关于如何从前端传递值(如C#)的第二个问题,参数化查询是一种很好的方法。作为一种替代方法,您也可以使用此方法,该方法涉及字符串操作以准备查询:
public int get(string val1,string val2)
{
string temp = string.Concat(val1,"," + val2); // concatenate all your params
temp = temp.replace("'","''").replace(",","','"); // replace any single qoute with escaped single quote
string s="insert into sample values('" + temp + "')"; // append altered string in query
SqlCommand cmd = new SqlCommand(s,con);
con.Open();
int i = cmd.ExecuteNonQuery();
con.Close();
return i;
}
希望有帮助 您已经知道,SQL面临的问题是在查询中避免撇号,我想这已经解决了。要回答关于如何从前端传递值(如C#)的第二个问题,参数化查询是一种很好的方法。作为一种替代方法,您也可以使用此方法,该方法涉及字符串操作以准备查询:
public int get(string val1,string val2)
{
string temp = string.Concat(val1,"," + val2); // concatenate all your params
temp = temp.replace("'","''").replace(",","','"); // replace any single qoute with escaped single quote
string s="insert into sample values('" + temp + "')"; // append altered string in query
SqlCommand cmd = new SqlCommand(s,con);
con.Open();
int i = cmd.ExecuteNonQuery();
con.Close();
return i;
}
希望有帮助 尝试传递动态值
insert into sample values(@name, N''' + @Yell_Your_self text + ''' )
通过传递动态值来尝试此操作
insert into sample values(@name, N''' + @Yell_Your_self text + ''' )
非常感谢jasonpublic int get(string val1,string val2){string s=“插入样本值(“+val1+”,“+val2+”);“SqlCommand cmd=new SqlCommand(s,con);con.Open();int i=cmd.ExecuteNonQuery();con.Close();return i;}尝试使用字符串添加数组中的所有参数。替换(“'”,“''”),然后用逗号连接所有值,使其为val1,val2,。。。。然后将其传递给Sql。@谢谢您的评论。我完全同意你的看法。非常感谢你jasonpublic int get(string val1,string val2){string s=“插入样本值(“+val1+”,“+val2+”);“SqlCommand cmd=new SqlCommand(s,con);con.Open();int I=cmd.ExecuteNonQuery();con.Close();return i;}尝试使用字符串添加数组中的所有参数。替换(“'”,“''”),然后用逗号连接所有值,使其为val1,val2,。。。。然后将其传递给Sql。@谢谢您的评论。我完全同意你的看法。这在sql server中运行良好,但我希望使用ado.net从frient端传递值,如c#.net。这在sql server中运行良好,但我希望使用ado.netpublic int post(string val1,string val2)从frient端传递值,如c#.net{string s=“插入示例值(“+val1+”,“+val2+”)”;SqlCommand cmd=new SqlCommand(s,con);con.Open();int i=cmd.ExecuteNonQuery();con.Close();return i;}(2)永远不要以这种方式从C#传递SQL语句中的变量。这正是创建SQL注入漏洞的方式,永远不应该这样做。相反,使用SqlParameter类传递SQL变量。它将防止SQL注入漏洞,还将处理引起问题的必要的引号转义(除了替换引号外,您可能还需要做其他20件转义操作)。public int post(string val1,string val2){string s=“插入示例值(“+val1+”,“+val2+”)”;SqlCommand cmd=new SqlCommand(s,con);con.Open();int i=cmd.ExecuteNonQuery();con.Close();return i;}(2)永远不要以这种方式从C#传递SQL语句中的变量。这正是创建SQL注入漏洞的方式,永远不应该这样做。相反,使用SqlParameter类传递SQL变量。它将防止SQL注入漏洞,还将处理导致您出现问题的必要引号转义(除了替换引号外,您可能还需要执行20项其他转义操作)。如果您遇到错误,请在问题中输入错误消息如果这是特定于从C#调用的,请在问题中说明,并包括您试图执行的C#代码。除所有其他响应外,请注意
text
,您不应再使用它;改用(n)varchar(max)
。@Pondlife-根据表格定义,他们正在使用varchar(20)
(尽管在问题文本中提到了text
)@MartinSmith很好的理解,我把这个和OP并排看,他明确地说“是数据类型text
”,虽然这些描述显然不可靠。如果您遇到错误,请将错误消息放在问题中如果这是特定于从C#调用的,请在问题中说明,并包括您尝试执行的C#代码。除了所有其他响应,请注意文本
,您不应再使用它;改用(n)varchar(max)
。@Pondlife-根据表格定义,他们正在使用varchar(20)
(尽管在问题文本中提到了text
)@MartinSmith很好的理解,我把这个和OP并排看,他明确地说“是数据类型text
”,虽然这些描述显然不可靠。