我能够在SQL数据库中插入不寻常的字符(返回63),没问题。
Letsay ProductName =ኣድድድ
然后如果我想再次插入,但首先检查数据库中是否存在产品名
var product = db.Products.Where(x => x.Productname == txtproduct.Text.Trim()).FirstOrDefault();
然后返回,因为已经有相同的产品名称 我的意思是
if(product == null)
{
Products pr = new Producst();
pr.ProductName = txtProductname.txt.trim() // tried even without trim()
db.Products.Add(pr);
db.Savechanges();
}
else
{
MessageBox.Show("There is the same productname registred"); // Returns allways this one , doesnt't matter which unusual character
}
即使我写另一个不寻常的字符,例如 productname =ሰግግግ,然后返回“注册了相同的产品名称”。 实际上,当我键入它们时,它们不是相同的单词,但是当我检查其ascii代码时,它们将返回63。
我不希望数据库中有重复的产品名称。有什么办法解决这个问题?请帮忙!
答案 0 :(得分:3)
ASCII码63是问号?
。这意味着文本无法在当前varchar
字段中表示,并且所有不支持的字符都转换为问号。您要么需要使用支持这些符号的排序规则来更改排序规则,要么最好将列的数据类型从varchar
更改为nvarchar
,以便能够存储Unicode字符。
答案 1 :(得分:0)
嗨,我的查询工作是在第一个查询中重现错误(重复)
CREATE TABLE #MyTable
(PrimaryKey int PRIMARY KEY,
CharCol varchar(10) COLLATE Finnish_Swedish_CI_AS NOT NULL,
CONSTRAINT UC_CharCol UNIQUE (CharCol)
);
GO
INSERT INTO #MyTable
SELECT 1, 'ኣድድድ'
INSERT INTO #MyTable
SELECT 2, 'ኣድድኣ'
INSERT INTO #MyTable
SELECT 3, 'ኣድኣ'
SELECT * FROM #MyTable
DROP TABLE #MyTable
结果是:
PrimaryKey CharCol
3 ???
1 ????
错误:
(1 ligne affectée)
Msg 2627, Niveau 14, État 1, Ligne 10
Violation de la contrainte UNIQUE KEY « UC_CharCol ». Impossible d'insérer une clé en double dans l'objet « dbo.#MyTable ». Valeur de clé dupliquée : (????).
但是当我尝试使用排序规则'Finnish_Swedish_100_CI_AS_SC'并使用指定的N'specialcharstring'时,它们的效果很好:
CREATE TABLE #MyTableBis
(PrimaryKey int PRIMARY KEY,
CharCol nvarchar(10) COLLATE Finnish_Swedish_100_CI_AS_SC NOT NULL,
CONSTRAINT UC_CharCol UNIQUE (CharCol)
);
GO
INSERT INTO #MyTableBis
SELECT 1, N'ኣድድድ'
INSERT INTO #MyTableBis
SELECT 2, N'ኣድድኣ'
INSERT INTO #MyTableBis
SELECT 3, N'ኣድኣ'
SELECT * FROM #MyTableBis
DROP TABLE #MyTableBis
结果:
PrimaryKey CharCol
3 ኣድኣ
2 ኣድድኣ
1 ኣድድድ
来源:
用于在Entity Framework上使用: EntityFramework update or insert Chinese or non-English text
答案 2 :(得分:0)
我测试并确认,仅搜索一个记录时,我会同时获得两个记录……这行得通吗?使用UNICODE()
Create Table #tbl
(
f1 nVarChar(25)
)
Insert Into #tbl Values
(N'ኣድድድ'),
(N'ሰግግግ')
Select
*
From #tbl
Where UNICODE (f1) = UNICODE (N'ኣድድድ')
更新:Unicode仅找到第一个字符。如果您可以将搜索条件解析为单个字符,则可能会起作用。
要查找“ኣድድድ”
Select f1 From #tbl
Where
Unicode(substring(f1,1,1)) = 4771 And
Unicode(substring(f1,2,1)) = 4853 And
Unicode(substring(f1,3,1)) = 4853 And
Unicode(substring(f1,4,1)) = 4853
答案 3 :(得分:0)
我认为使用在我的计算机上运行良好的相关代码可能会导致Linq错误:
private void button1_Click(object sender, EventArgs e)
{
try
{
TESTEntities db = new TESTEntities();
List<MyTableBis2> myDataList = db.MyTableBis2.ToList();
string valuerFull = "";
foreach (MyTableBis2 data in myDataList)
{
valuerFull += data.CharCol + " ";
}
MessageBox.Show(valuerFull);
var newValueAdd = textBox1.Text.Trim();
MessageBox.Show(newValueAdd);
var ch = myDataList.FirstOrDefault(x => x.CharCol.Equals(newValueAdd));
if (ch == null)
{
MyTableBis2 m = new MyTableBis2();
m.CharCol = textBox1.Text.Trim();
db.MyTableBis2.Add(m);
db.SaveChanges();
}
else
{
MessageBox.Show("This product exist");
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
Exception innerE = ex.InnerException;
while (innerE != null)
{
MessageBox.Show(innerE.Message);
innerE = innerE.InnerException;
}
}
}
等待您退货,看看是否有效