В Mac OS, очевидно, нет такого языка, как C ++ / CLI. В Windows C ++ / CLI фактически компилируется как управляемый код, запущенный CLR, который запускает собственный код; так как на Mac OS Mono не интегрирована в систему, это скорее наоборот. Ваше приложение является родным и может содержать управляемый код.
Mono предоставляет функции для размещения виртуальной машины CLR внутри процесса. Поскольку классы CLR напрямую не подвержены вашему C-коду, вы сможете вызывать методы объектов с помощью отражённых вызовов.
Существует документация о том, как вставлять Mono в приложение на официальном сайте. Поскольку вы не заинтересованы в запуске .NET-программ непосредственно , вам лучше прочитать раздел «Invoking Methods in CIL Universe» . В Mac OS вы захотите установить связь с картой Mono из папки /Library/Frameworks
вместо использования pkg-config
.
Это действительно не должно заменять фактическое чтение вышеуказанного документа, но следующее можно увидеть как руководство относительно того, чего ожидать:
#include
#include
#include
#include
// create an app domain
// http://en.wikipedia.org/wiki/Application_Domain
MonoDomain* domain = mono_jit_init("Domain");
// mandatory Cocoa call to show that Mono and ObjC work together
NSBundle* mainBundle = [NSBundle mainBundle];
NSString* dll = [mainBundle pathForResource:@"your-dll" ofType:@"dll"];
// load the referenced assembly in our domain
MonoAssembly* assembly = mono_domain_assembly_open(domain, [dll UTF8String]);
MonoImage* image = mono_assembly_get_image(assembly);
// find the class we want to wrap and create an uninitialized instance
MonoClass* classHandle = mono_class_from_name(image, "Name.Space", "YourClass");
MonoObject* object = mono_object_new(domain, classHandle);
// this calls the default, argument-less ctor
// for more complex constructors, you need to find the method handle and call it
// (helpful hint: constructors are internally called ".ctor", so the description
// string will look like "Namespace.Class..ctor()")
mono_runtime_object_init(object);
// get a method handle to whatever you like
const char* descAsString = "Your.NameSpace.YourClass:YourMethod()";
MonoMethodDesc* description = mono_method_desc_new(descAsString);
MonoMethod* method = mono_method_desc_search_in_class(description, classHandle);
// call it
void* args[0];
mono_runtime_invoke(method, object, args, NULL);
// when you're done, shutdown the runtime by destroying the app domain
mono_jit_cleanup(domain);
Если вы не найдете это очень привлекательным, вы можете пойти по-другому, как вы упомянули, и посмотреть в MonoMac , который обеспечивает привязки .NET к большой части API, которые вы можете использовать в приложении Mac (Cocoa, CoreImage, CoreAnimation и т. д.) и означает создание ваших собственных привязок.
Single quotes are escaped by doubling them up, just as you've shown us in your example. The following SQL illustrates this functionality. I tested it on SQL Server 2008:
DECLARE @my_table TABLE (
[value] VARCHAR(200)
)
INSERT INTO @my_table VALUES ('hi, my name''s tim.')
SELECT * FROM @my_table
value
==================
hi, my name's tim.
Следующий синтаксис выйдет из Вас ТОЛЬКО ОДНА кавычка:
SELECT ''''
результатом будет одинарная кавычка. Могло бы быть очень полезным для создания динамического SQL:).
Многие из нас знают, что Популярный Метод Выхода из Одинарных кавычек путем Сгибания их легко как ниже.
PRINT 'It''s me, Arul.';
мы собираемся считать некоторые другие альтернативные способы выйти из одинарных кавычек.
1. Символы UNICODE
39 являются символом UNICODE Одинарной кавычки. Таким образом, мы можем использовать его как ниже.
PRINT 'Hi,it'+CHAR(39)+'s Arul.';
PRINT 'Helo,it'+NCHAR(39)+'s Arul.';
2. QUOTED_IDENTIFIER
Другое простое и лучшее альтернативное решение должен использовать QUOTED_IDENTIFIER. Когда QUOTED_IDENTIFIER установлен на ПРОЧЬ, строки могут быть включены в двойные кавычки. В этом сценарии мы don’t должен выйти из одинарных кавычек. Так, этот путь был бы очень полезен при использовании партии строковых значений с одинарными кавычками. Это будет очень полезно, в то время как использование такого количества строк ВСТАВЛЯЕТ/ОБНОВЛЯЕТ сценарии где значения столбцов, имеющие одинарные кавычки.
SET QUOTED_IDENTIFIER OFF;
PRINT "It's Arul."
SET QUOTED_IDENTIFIER ON;
ЗАКЛЮЧЕНИЕ
вышеупомянутые методы применимы и к AZURE и В Помещении.
The doubling up of the quote should have worked, so it's peculiar that it didn't work for you; however, an alternative is using double quote characters, instead of single ones, around the string. I.e.,
insert into my_table values("hi, my name's tim."
);
How about:
insert into my_table values('hi, my name'+char(39)+'s tim.')