このコード:
public bool IsValidColumn(string tableName, string columnName)
{
//return true;// <-- when I uncomment this, I don't get the err msg (but I don't know whether it's a valid column or not, either)
bool validColumn = false;
string tblQuery = "SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = @tableName AND COLUMN_NAME = @columnName";
checkConnection();
try
{
SqlCeCommand cmd = objCon.CreateCommand();
cmd.CommandText = tblQuery;
SqlCeParameter tblNameParam = new SqlCeParameter("@tableName", SqlDbType.NVarChar, 128);
tblNameParam.Value = tableName;
cmd.Parameters.Add(tblNameParam);
SqlCeParameter colNameParam = new SqlCeParameter("@columnName", SqlDbType.NVarChar, 128);
colNameParam.Value = tableName;
cmd.Parameters.Add(colNameParam);
//int i = (int)cmd.ExecuteScalar();
int i = 0;
object obj = cmd.ExecuteScalar();
if ((obj != null) && (obj != DBNull.Value))
{
i = Int32.Parse(obj.ToString());
validColumn = i > 0;
}
else
{
MessageBox.Show("NULL returned from ExecuteScalar. Remove this line.");
}
}
catch (SqlCeException sqlceex)
{
return false;
}
catch (Exception ex)
{
return false;
}
return validColumn;
}
...ここの以前の回答から/に基づいて適応されました: C# を使用して SQL Server CE テーブルに列が存在するかどうかを確認するにはどうすればよいですか?
それでも、「クエリの解析中にエラーが発生しました。[トークン行番号、トークン行オフセット、トークンのエラー、、]」(ここで不満を言いました:この DDL の解析中にエラーが発生するのはなぜですか? 、なぜエンジンはそれを見つけることについてより具体的にできないのですか?そしてここに:
SQL Server CE の DDL パーサーは非常にうるさいですが、何に問題があるかについては秘密主義です)。
このエラーメッセージの原因を突き止めようとして、実際にレガシーコードをかなりリファクタリングしました (冷蔵庫からたくさんの腐ったスパゲッティを投げ出しました) ので、時間の無駄ではありませんでした。 、しかし今、そのエラーメッセージの原因は上記のコードにあることがわかりました。問題は、このエラー メッセージを生成せずに列が有効かどうかを判断するにはどうすればよいかということです。