列“ReservedWord”不属于表 ReservedWords

本文介绍了解决在使用NHibernate框架时出现的“ReservedWord不属于ReservedWords”错误的方法。该问题通常由于MySql.Data.dll未与NHibernate.dll放在同一目录导致。解决办法包括将MySql.Data.dll复制到bin目录下,并在配置文件中设置hbm2ddl.keywords属性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

列“ReservedWord”不属于表 ReservedWords 的解决方案。

  ReservedWord不属于ReservedWords。

首先明确,这个列真不知道是什么东东。 但错误的原因算是找到了!!
 原因:MySql.Data.dll没有和NHibernate.dll在同一个目录下。MySql.Data.dll添加引用了也没用,把那个dll拷到bin下面,也就是 跟NHibernate.dll在一起,这家伙才能找到MySqlDataDriver。疯掉!
 另外,如果还有错,貌似 就是 :
在NHibernate配置文件的 <session-factory> 节点里添加:
<property name="hbm2ddl.keywords">none</property>

#include <stdio.h> #include <ctype.h> #include <string.h> // 保留字 const char* reserved_words[] = { "const", "main", "if", "else", "while", "int", "for", "return", "then" }; int reserved_words_count = 9; // 运算符 const char* operators[] = { "+", "-", "*", "/", "==", "<", "<=", ">", ">=", "!=" }; int operators_count = 10; // 分隔符 const char* delimiters[] = { "(", ")", "{", "}", ";", ",", "=" }; int delimiters_count = 7; // 全局变量 char source_code[1024]; int code_length = 0; int position = 0; // 函数声明 void skip_whitespace(); int is_reserved_word(char* word); void recognize_keyword_or_identifier(); void recognize_number(); void recognize_operator(); void recognize_delimiter(); void lexical_analyzer(); int main() { printf("请输入源代码(输入end结束):\n"); char line[1024]; while (fgets(line, sizeof(line), stdin) != NULL) { if (strstr(line, "end") != NULL) { // 修正了这里,移除了多余的 '/' break; } strcat(source_code, line); code_length = strlen(source_code); } lexical_analyzer(); return 0; } // 跳过空白字符 skip_whitespace()函数用于跳过空格、制符和换行符 void skip_whitespace() { while (position < code_length && isspace(source_code[position])) { position++; } } // 判断是否是保留字 int is_reserved_word(char* word) { for (int i = 0; i < reserved_words_count; i++) { if (strcmp(word, reserved_words[i]) == 0) { return 1; } } return 0; } // 识别关键字或标识符 void recognize_keyword_or_identifier() { char word[64] = ""; while (position < code_length && (isalnum(source_code[position]) || source_code[position] == '_')) { strncat(word, &source_code[position], 1); position++; } if (is_reserved_word(word)) { printf("(1, %s)\n", word); } else { printf("(2, %s)\n", word); } } // 识别数字 void recognize_number() { char number[64] = ""; while (position < code_length && isdigit(source_code[position])) { strncat(number, &source_code[position], 1); position++; } printf("(3, %s)\n", number); } // 识别运算符 void recognize_operator() { int original_pos = position; // 尝试双字符运算符 if (original_pos + 1 < code_length) { char two_chars[3] = { source_code[original_pos], source_code[original_pos + 1], '\0' }; for (int i = 0; i < operators_count; i++) { if (strcmp(two_chars, operators[i]) == 0) { printf("(4, %s)\n", two_chars); position += 2; return; } } } // 尝试单字符运算符 char single_char[2] = { source_code[original_pos], '\0' }; for (int i = 0; i < operators_count; i++) { if (strlen(operators[i]) == 1 && operators[i][0] == single_char[0]) { printf("(4, %s)\n", single_char); position += 1; return; } } printf("非法运算符: %s\n", single_char); position += 1; } // 识别分隔符,将等于号识别为分隔符 void recognize_delimiter() { char delimiter[2] = ""; strncat(delimiter, &source_code[position], 1); position++; printf("(5, %s)\n", delimiter); } // 词法分析器主函数 lexical_analyzer()函数用于遍历源代码,识别不同的单词 void lexical_analyzer() { while (position < code_length) { skip_whitespace(); if (position >= code_length) { break; } char current_char = source_code[position]; if (isalpha(current_char) || current_char == '_') { recognize_keyword_or_identifier(); } else if (isdigit(current_char)) { recognize_number(); } else { // 先判断是否为分隔符 int is_delimiter = 0; for (int i = 0; i < delimiters_count; i++) { if (source_code[position] == delimiters[i][0]) { recognize_delimiter(); is_delimiter = 1; break; } } if (!is_delimiter) { recognize_operator(); } } } } 使用上述代码后,出现错误: 'strcat': This function or variable may be unsafe. Consider using strcat_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details. compile E:\computerarchitecture\compile\exp01.cpp 38 该怎么解决
最新发布
05-29
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值