Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/387.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 字段相等需要什么标准?_C#_Java_Sql_Sql Server_Database - Fatal编程技术网

C# 字段相等需要什么标准?

C# 字段相等需要什么标准?,c#,java,sql,sql-server,database,C#,Java,Sql,Sql Server,Database,我正在用C#和Java构建一个查询生成器模块,用户可以根据指定的连接表达式连接表,例如[Table1].[ID]=[Table2].[ID] 用户可以修改联接表达式,并可以选择将Table1中的任何字段与Table2中的任何字段相等 我想检查列的数据类型和长度是否相同,但是varchar(10)列可以与nchar(10)列连接。只要长度相同,就可以选择这些不同的数据类型 因此,我应该在检查中指定哪些条件以确保用户选择的联接表达式有效?我不能单靠PK/FK约束 标准可以应用于C#或Java-这无关

我正在用C#和Java构建一个查询生成器模块,用户可以根据指定的连接表达式连接表,例如
[Table1].[ID]=[Table2].[ID]

用户可以修改联接表达式,并可以选择将
Table1
中的任何字段与
Table2
中的任何字段相等

我想检查列的数据类型和长度是否相同,但是
varchar(10)
列可以与
nchar(10)
列连接。只要长度相同,就可以选择这些不同的数据类型

因此,我应该在检查中指定哪些条件以确保用户选择的联接表达式有效?我不能单靠PK/FK约束


标准可以应用于C#或Java-这无关紧要,因为一旦我有了一个一般性的答案,我就可以将我的解决方案转换为两者都适用。

我认为最好的办法是只使用硬编码集,然后检查两个字段是否在同一集中,然后比较长度

var TypeSets = new Dictionary<string, List<string>> {
                   { "string", new[] { "varchar", "nchar", "text" } },
                   { "integer", new[] { "int", "smallint" } },
               };

联机丛书将为您提供可以隐式转换、必须显式转换和无法转换的数据类型。搜索强制转换和转换(Transact-SQL)并向下滚动


既然您已经了解了规则,那么您应该能够构建某种规则引擎

您如何访问数据库?你能从你的代码中分辨出字段本身是什么类型吗?@Bobson-是的,很容易做到这一点。存在许多库,以及对sys.INFORMATION_SCHEMA执行的SQL语句。这不是我要问的。您可以使用
size(columnName)
检查列的大小。如果两个表的列返回相同的大小,则允许联接..否则将闪烁一条错误消息。@VishalK-但这是一种情况。例如,如果一个是
varchar
,另一个是
nchar
,则也可以联接字段。我如何检查这个场景?由于只允许加入相等的数据类型,因此在这种情况下不起作用,否?我可以检查列的类型是,但如果一个是
nchar
,另一个是
varchar
,该怎么办?这些不是相等的吗?谢谢你的建议。那么,硬编码是一种方式吗?我唯一的问题是数据类型的数量不真实,因此编译这样的列表需要相当长的时间。@DotNET-我不知道这是最好的方法,但可能是最安全的方法。另一种选择是根据什么是可兑换的来尝试和猜测,这可能会导致以后的问题。谢谢你的建议+1.
if (TypeSets.Any(x => x.Value.Contains(fieldType1) && x.Value.Contains(fieldType2)))
{
   // Check length of each field
}
else 
{
    return false;
}