修订了一个字符集相关的bug

在发送给mysql服务器的SQL编码时,CLR的System::String类型需要转成MultiByte类型的String。

使用了wcstombs_s进行转换,之前需要setlocale设定转换字符集。

setlocale(LC_ALL,"chs_chn.936");

意味着中国语_中国地区_GBKcodepage。


int tsql::f_StringToChar(System::String ^pStr,	// 被转换的System::String
						 char **pOut,			// 转换出的char 数组
						 int * piSize)			// 转换出的大小.
{
	pin_ptr<const wchar_t> wch = PtrToStringChars(pStr);

	// Convert to a char*
	size_t origsize = wcslen(wch) + 1;
	const size_t newsize = origsize * sizeof(wchar_t);
	size_t convertedChars = 0;
	
	if (*pOut == NULL)
	{
		*pOut = new char [newsize];
		if (piSize)
			*piSize = (int)newsize;
	}
	else
	{
		if (piSize)
		{
			if (*piSize < (int)newsize)
			{
				delete [] *pOut;
				*pOut = new char [newsize];
				if (piSize)
					*piSize =(int) newsize;
			}
		}
	}
	setlocale(LC_ALL,"chs_chn.936");	// 等于LC_ALL,""
	wcstombs_s(&convertedChars, *pOut, newsize, wch, newsize);
	return newsize;
}


你可能感兴趣的:(mysql,String,服务器,delete,System,TSQL)