字段类型:varchar
方式一: insert into table (col) values (N'简体中文') ,这种方式没问题!
方式二:insert into table (col) values (@col) 这种方式知怎么解决。
程序里向数据库中 insert 和 update 数据全是第二种方式,有没办法解决?
17 个解决方案
#1
查了一下,好像将 varchar 改成 nvarchar类弄可以,试试看先。
#2
string sSQL =
"insert into buyer_order_excel(brand_name,bom_name,buyer_name,distributor,sp,port," +
"buyer_po,wyn_po,wanted_time,buyer_currency,buyer_price,order_total_qty,bom_size,order_qty,order_date,buyer_remark,color_name,buyer_code)";
sb.AppendFormat("values (N'{0}',N'{1}',N'{2}',N'{3}',N'{4}',N'{5}',N'{6}',N'{7}',N'{8}',N'{9}',N'{10}',N'{11}',N'{12}',N'{13}',N'{14}',N'{15}',N'{16}',N'{17}')\n",
cellBrandName.Text.ToString().Trim(), strBomName, strBuyerName, strDistributorName,strSpName,
strPortName, strBuyerPoName, strWynPoName, strTime, strCurrency, strUP, dQty, sSize, dUqty, OrderDate, strRemark, strColorName, strBuyerCode);
cmd = new System.Data.SqlClient.SqlCommand(sb.ToString(), con, tran);
////////////////////////////////////////////////////////////////////
要用N''
"insert into buyer_order_excel(brand_name,bom_name,buyer_name,distributor,sp,port," +
"buyer_po,wyn_po,wanted_time,buyer_currency,buyer_price,order_total_qty,bom_size,order_qty,order_date,buyer_remark,color_name,buyer_code)";
sb.AppendFormat("values (N'{0}',N'{1}',N'{2}',N'{3}',N'{4}',N'{5}',N'{6}',N'{7}',N'{8}',N'{9}',N'{10}',N'{11}',N'{12}',N'{13}',N'{14}',N'{15}',N'{16}',N'{17}')\n",
cellBrandName.Text.ToString().Trim(), strBomName, strBuyerName, strDistributorName,strSpName,
strPortName, strBuyerPoName, strWynPoName, strTime, strCurrency, strUP, dQty, sSize, dUqty, OrderDate, strRemark, strColorName, strBuyerCode);
cmd = new System.Data.SqlClient.SqlCommand(sb.ToString(), con, tran);
////////////////////////////////////////////////////////////////////
要用N''
#3
读的时候加N'
#4
请看清问题内容,谢谢!
#5
<system.web>
<globalization
fileEncoding="gb2312"
requestEncoding="gb2312"
responseEncoding="gb2312"
culture="zh-CN"
uiCulture="zh-CN"
/>
上面的几个情况还没有解决,如果是写网站 那么在WebConfig里面加上面代码
<globalization
fileEncoding="gb2312"
requestEncoding="gb2312"
responseEncoding="gb2312"
culture="zh-CN"
uiCulture="zh-CN"
/>
上面的几个情况还没有解决,如果是写网站 那么在WebConfig里面加上面代码
#6
N是一定要加的,像LZ這樣用參數,也是一樣的
declare @col nvarchar(20)
set @col=N'content'
insert into table (col) values (@col)
#7
另外,建議所以文字字符集使用utf-8,數據庫中存儲字段使用nvarchar代替varchar
#8
1. N''要和数据类型nvarchar, nchar一起使用,如果对varchar, char字段类型强制使用N'',则会产生一些特殊现象,甚至无法控制;
2. 在英文字符集(Collation name为Latin1_General_CI_AS)下,想要保存特殊符号字符、中文等双字节字符,在定义表结构时要使用nvarchar或者nchar,在保存时要用N'';
3. 在中文字符集(Collation name为Chinese_PRC_CI_AS)下,数据库系统缺省已经可以保存特殊符号字符、中文等双字节字符。即使用不使用N'',都按双字节处理。但为了统一期间,建议:
在定义表结构时如果使用nvarchar或者nchar,在保存时要用N'',
在定义表结构时如果使用varchar和char,此时不要使用N''操作
2. 在英文字符集(Collation name为Latin1_General_CI_AS)下,想要保存特殊符号字符、中文等双字节字符,在定义表结构时要使用nvarchar或者nchar,在保存时要用N'';
3. 在中文字符集(Collation name为Chinese_PRC_CI_AS)下,数据库系统缺省已经可以保存特殊符号字符、中文等双字节字符。即使用不使用N'',都按双字节处理。但为了统一期间,建议:
在定义表结构时如果使用nvarchar或者nchar,在保存时要用N'',
在定义表结构时如果使用varchar和char,此时不要使用N''操作
#9
qq22345111 这个肯定是设置成 utf-8 的,因为网站运行在国外主机上,网站有简体中文、繁体中文和英文三种,浏览对象主要是国外用户。
boblaw ,insert into table (col) values (@col) 是在asp.net程序里执行的,@col的值要怎么设置,代码如下:
谢谢各位!
boblaw ,insert into table (col) values (@col) 是在asp.net程序里执行的,@col的值要怎么设置,代码如下:
switch(typeStr.ToUpper()) {
case "DATETIME":
cmd.Parameters.Add("@" + colStr,SqlDbType.DateTime);
break;
case "BIGINT":
cmd.Parameters.Add("@" + colStr,SqlDbType.BigInt);
break;
case "TEXT":
cmd.Parameters.Add("@" + colStr,SqlDbType.Text);
break;
case "MONEY":
cmd.Parameters.Add("@" + colStr,SqlDbType.Money);
break;
case "INT":
cmd.Parameters.Add("@" + colStr,SqlDbType.Int);
break;
case "DECIMAL":
cmd.Parameters.Add("@" + colStr,SqlDbType.Decimal);
break;
default:
cmd.Parameters.Add("@" + colStr,SqlDbType.VarChar);
break;
}
cmd.Parameters["@" + colStr].Value = vas[i];
谢谢各位!
#10
在SQL语句中,String前出现的N''标示,作用是著名被标注的字符串是Unicode编码。一般情况下都表明你试图将NCHAR, NVARCHAR or NTEXT 的值类型转换为(或复值到) CHAR, VARCHAR or TEXT中。
另外,有些SQL系统存储过程的参数需要用Unicode编码的值作为参数。
如果当你输入
EXEC sp_ExecuteSQL 'SELECT 1'
会有以下错误:
Server: Msg 214, Level 16, State 2, Procedure sp_executesql, Line 1
Procedure expects parameter '@statement' of type 'ntext/nchar/nvarchar'.
正确的方法是:
-- (a) using the N prefix
EXEC sp_ExecuteSQL N'SELECT 1'
-- (b) using a variable
DECLARE @sql NVARCHAR(100)
SET @sql = N'SELECT 1'
EXEC sp_ExecuteSQL @sql
另外,有些SQL系统存储过程的参数需要用Unicode编码的值作为参数。
如果当你输入
EXEC sp_ExecuteSQL 'SELECT 1'
会有以下错误:
Server: Msg 214, Level 16, State 2, Procedure sp_executesql, Line 1
Procedure expects parameter '@statement' of type 'ntext/nchar/nvarchar'.
正确的方法是:
-- (a) using the N prefix
EXEC sp_ExecuteSQL N'SELECT 1'
-- (b) using a variable
DECLARE @sql NVARCHAR(100)
SET @sql = N'SELECT 1'
EXEC sp_ExecuteSQL @sql
#11
对了,SQL报务器的默认编码是跟它所在的系统默认语言是一样的{即在安装时系统的默认语言},当数据库所在的系统是英文操作系统时,它就没有中文字符集了~~~
#12
楼主请您注意“字段类型:varchar ”与我说的8楼的内容啊,~~~,祝您好运
#13
在asp.net中只要这样就行了 "N'"+值+"'" 就行了,我就不举例了,很简单的~~
#14
cmd.Parameters["@" + colStr].Value = vas[i]; 这样的赋值 要怎么加 N ,因为我的程序里都是这样INSERT的,所以最好是在这种方式的基础上解决。谢谢
#15
cmd.Parameters.Add("@col",SqlDbType.VarChar);
cmd.Parameters["@col"].Value = "值" ,这里要怎么处理?
cmd.Parameters["@col"].Value = "值" ,这里要怎么处理?
#16
已经给你回信了~~
#17
解决了。
1、将数据库中所有的 varcher 和char 字型改为 nvarchar 和 nchar 。
2、insert 和 update 还有 select 中的中文字符前要加 N,直接写SQL,如 sql = "insert into table (col) values (N'"+ valueVar +"')" 。
下面这种方法没有解决,现在只能改所有的SQL语句。
cmd.Parameters.Add( "@col ",SqlDbType.VarChar);
cmd.Parameters[ "@col "].Value = "N'"+ valueVar +"'";
谢谢楼上各位。
1、将数据库中所有的 varcher 和char 字型改为 nvarchar 和 nchar 。
2、insert 和 update 还有 select 中的中文字符前要加 N,直接写SQL,如 sql = "insert into table (col) values (N'"+ valueVar +"')" 。
下面这种方法没有解决,现在只能改所有的SQL语句。
cmd.Parameters.Add( "@col ",SqlDbType.VarChar);
cmd.Parameters[ "@col "].Value = "N'"+ valueVar +"'";
谢谢楼上各位。
#1
查了一下,好像将 varchar 改成 nvarchar类弄可以,试试看先。
#2
string sSQL =
"insert into buyer_order_excel(brand_name,bom_name,buyer_name,distributor,sp,port," +
"buyer_po,wyn_po,wanted_time,buyer_currency,buyer_price,order_total_qty,bom_size,order_qty,order_date,buyer_remark,color_name,buyer_code)";
sb.AppendFormat("values (N'{0}',N'{1}',N'{2}',N'{3}',N'{4}',N'{5}',N'{6}',N'{7}',N'{8}',N'{9}',N'{10}',N'{11}',N'{12}',N'{13}',N'{14}',N'{15}',N'{16}',N'{17}')\n",
cellBrandName.Text.ToString().Trim(), strBomName, strBuyerName, strDistributorName,strSpName,
strPortName, strBuyerPoName, strWynPoName, strTime, strCurrency, strUP, dQty, sSize, dUqty, OrderDate, strRemark, strColorName, strBuyerCode);
cmd = new System.Data.SqlClient.SqlCommand(sb.ToString(), con, tran);
////////////////////////////////////////////////////////////////////
要用N''
"insert into buyer_order_excel(brand_name,bom_name,buyer_name,distributor,sp,port," +
"buyer_po,wyn_po,wanted_time,buyer_currency,buyer_price,order_total_qty,bom_size,order_qty,order_date,buyer_remark,color_name,buyer_code)";
sb.AppendFormat("values (N'{0}',N'{1}',N'{2}',N'{3}',N'{4}',N'{5}',N'{6}',N'{7}',N'{8}',N'{9}',N'{10}',N'{11}',N'{12}',N'{13}',N'{14}',N'{15}',N'{16}',N'{17}')\n",
cellBrandName.Text.ToString().Trim(), strBomName, strBuyerName, strDistributorName,strSpName,
strPortName, strBuyerPoName, strWynPoName, strTime, strCurrency, strUP, dQty, sSize, dUqty, OrderDate, strRemark, strColorName, strBuyerCode);
cmd = new System.Data.SqlClient.SqlCommand(sb.ToString(), con, tran);
////////////////////////////////////////////////////////////////////
要用N''
#3
读的时候加N'
#4
请看清问题内容,谢谢!
#5
<system.web>
<globalization
fileEncoding="gb2312"
requestEncoding="gb2312"
responseEncoding="gb2312"
culture="zh-CN"
uiCulture="zh-CN"
/>
上面的几个情况还没有解决,如果是写网站 那么在WebConfig里面加上面代码
<globalization
fileEncoding="gb2312"
requestEncoding="gb2312"
responseEncoding="gb2312"
culture="zh-CN"
uiCulture="zh-CN"
/>
上面的几个情况还没有解决,如果是写网站 那么在WebConfig里面加上面代码
#6
N是一定要加的,像LZ這樣用參數,也是一樣的
declare @col nvarchar(20)
set @col=N'content'
insert into table (col) values (@col)
#7
另外,建議所以文字字符集使用utf-8,數據庫中存儲字段使用nvarchar代替varchar
#8
1. N''要和数据类型nvarchar, nchar一起使用,如果对varchar, char字段类型强制使用N'',则会产生一些特殊现象,甚至无法控制;
2. 在英文字符集(Collation name为Latin1_General_CI_AS)下,想要保存特殊符号字符、中文等双字节字符,在定义表结构时要使用nvarchar或者nchar,在保存时要用N'';
3. 在中文字符集(Collation name为Chinese_PRC_CI_AS)下,数据库系统缺省已经可以保存特殊符号字符、中文等双字节字符。即使用不使用N'',都按双字节处理。但为了统一期间,建议:
在定义表结构时如果使用nvarchar或者nchar,在保存时要用N'',
在定义表结构时如果使用varchar和char,此时不要使用N''操作
2. 在英文字符集(Collation name为Latin1_General_CI_AS)下,想要保存特殊符号字符、中文等双字节字符,在定义表结构时要使用nvarchar或者nchar,在保存时要用N'';
3. 在中文字符集(Collation name为Chinese_PRC_CI_AS)下,数据库系统缺省已经可以保存特殊符号字符、中文等双字节字符。即使用不使用N'',都按双字节处理。但为了统一期间,建议:
在定义表结构时如果使用nvarchar或者nchar,在保存时要用N'',
在定义表结构时如果使用varchar和char,此时不要使用N''操作
#9
qq22345111 这个肯定是设置成 utf-8 的,因为网站运行在国外主机上,网站有简体中文、繁体中文和英文三种,浏览对象主要是国外用户。
boblaw ,insert into table (col) values (@col) 是在asp.net程序里执行的,@col的值要怎么设置,代码如下:
谢谢各位!
boblaw ,insert into table (col) values (@col) 是在asp.net程序里执行的,@col的值要怎么设置,代码如下:
switch(typeStr.ToUpper()) {
case "DATETIME":
cmd.Parameters.Add("@" + colStr,SqlDbType.DateTime);
break;
case "BIGINT":
cmd.Parameters.Add("@" + colStr,SqlDbType.BigInt);
break;
case "TEXT":
cmd.Parameters.Add("@" + colStr,SqlDbType.Text);
break;
case "MONEY":
cmd.Parameters.Add("@" + colStr,SqlDbType.Money);
break;
case "INT":
cmd.Parameters.Add("@" + colStr,SqlDbType.Int);
break;
case "DECIMAL":
cmd.Parameters.Add("@" + colStr,SqlDbType.Decimal);
break;
default:
cmd.Parameters.Add("@" + colStr,SqlDbType.VarChar);
break;
}
cmd.Parameters["@" + colStr].Value = vas[i];
谢谢各位!
#10
在SQL语句中,String前出现的N''标示,作用是著名被标注的字符串是Unicode编码。一般情况下都表明你试图将NCHAR, NVARCHAR or NTEXT 的值类型转换为(或复值到) CHAR, VARCHAR or TEXT中。
另外,有些SQL系统存储过程的参数需要用Unicode编码的值作为参数。
如果当你输入
EXEC sp_ExecuteSQL 'SELECT 1'
会有以下错误:
Server: Msg 214, Level 16, State 2, Procedure sp_executesql, Line 1
Procedure expects parameter '@statement' of type 'ntext/nchar/nvarchar'.
正确的方法是:
-- (a) using the N prefix
EXEC sp_ExecuteSQL N'SELECT 1'
-- (b) using a variable
DECLARE @sql NVARCHAR(100)
SET @sql = N'SELECT 1'
EXEC sp_ExecuteSQL @sql
另外,有些SQL系统存储过程的参数需要用Unicode编码的值作为参数。
如果当你输入
EXEC sp_ExecuteSQL 'SELECT 1'
会有以下错误:
Server: Msg 214, Level 16, State 2, Procedure sp_executesql, Line 1
Procedure expects parameter '@statement' of type 'ntext/nchar/nvarchar'.
正确的方法是:
-- (a) using the N prefix
EXEC sp_ExecuteSQL N'SELECT 1'
-- (b) using a variable
DECLARE @sql NVARCHAR(100)
SET @sql = N'SELECT 1'
EXEC sp_ExecuteSQL @sql
#11
对了,SQL报务器的默认编码是跟它所在的系统默认语言是一样的{即在安装时系统的默认语言},当数据库所在的系统是英文操作系统时,它就没有中文字符集了~~~
#12
楼主请您注意“字段类型:varchar ”与我说的8楼的内容啊,~~~,祝您好运
#13
在asp.net中只要这样就行了 "N'"+值+"'" 就行了,我就不举例了,很简单的~~
#14
cmd.Parameters["@" + colStr].Value = vas[i]; 这样的赋值 要怎么加 N ,因为我的程序里都是这样INSERT的,所以最好是在这种方式的基础上解决。谢谢
#15
cmd.Parameters.Add("@col",SqlDbType.VarChar);
cmd.Parameters["@col"].Value = "值" ,这里要怎么处理?
cmd.Parameters["@col"].Value = "值" ,这里要怎么处理?
#16
已经给你回信了~~
#17
解决了。
1、将数据库中所有的 varcher 和char 字型改为 nvarchar 和 nchar 。
2、insert 和 update 还有 select 中的中文字符前要加 N,直接写SQL,如 sql = "insert into table (col) values (N'"+ valueVar +"')" 。
下面这种方法没有解决,现在只能改所有的SQL语句。
cmd.Parameters.Add( "@col ",SqlDbType.VarChar);
cmd.Parameters[ "@col "].Value = "N'"+ valueVar +"'";
谢谢楼上各位。
1、将数据库中所有的 varcher 和char 字型改为 nvarchar 和 nchar 。
2、insert 和 update 还有 select 中的中文字符前要加 N,直接写SQL,如 sql = "insert into table (col) values (N'"+ valueVar +"')" 。
下面这种方法没有解决,现在只能改所有的SQL语句。
cmd.Parameters.Add( "@col ",SqlDbType.VarChar);
cmd.Parameters[ "@col "].Value = "N'"+ valueVar +"'";
谢谢楼上各位。