c#调用 mycat
2017-06-01 10:28:28 u014180504 阅读数 3246

这里其实mycat和mysql没啥区别从我们程序的角度来看,一定要理解这句话啊,从程序的角度,最原始的方式就是通过Oracle提供的mysql.data.dll去连接,连接字符串

"server=127.0.0.1,8066;database=TESTDB;uid=root;pwd=123456;Pooling=true;Connection Lifetime=120;Connection Timeout=120;" 不知道为什么这么写就是提示找不到host,

改成这样:

"server=127.0.0.1;database=TESTDB;uid=root;pwd=123456;Pooling=true;Connection Lifetime=120;Connection Timeout=120;Port=8066" 

就可以了。


这个就没什么好说的了,跟连接mysql一点区别没有,

还有一种方式就是

http://www.cnblogs.com/yuangang/p/5830716.html

这位园友说的使用他封装的库

也是通过nuget引用Pomelo.Data.MyCat,但是注意要切换搜索条件要包含预发版才能找到,然后代码如下:



就这么简单实用,希望会对大家有帮助


2011-08-09 14:10:33 xiongxyt2 阅读数 908
 

如何在JavaScript访问C#函数,如何在C#中访问JavaScript的已有变量等实现方法
问:
1.如何在JavaScript访问C#函数?
2.如何在JavaScript访问C#变量?
3.如何在C#中访问JavaScript的已有变量?
4.如何在C#中访问JavaScript函数?
问题1答案如下:
javaScript函数中执行C#代码中的函数:
方法一:1、首先建立一个按钮,在后台将调用或处理的内容写入button_click中;
2、在前台写一个js函数,内容为document.getElementById("btn1").click();
3、在前台或后台调用js函数,激发click事件,等于访问后台c#函数;
方法二:1、函数声明为public
后台代码(把public改成protected也可以)
public string ss()
{
return("a");
}
2、在html里用<%=fucntion()%>可以调用
前台脚本
<script language=javascript>
var a = "<%=ss()%>";
alert(a);
</script>
方法三:1、<script language="javascript">
<!--
function __doPostBack(eventTarget, eventArgument)
{
var theForm = document.Form1; //指runat=server的form
theForm.__EVENTTARGET.value = eventTarget;
theFrom.__EVENTARGUMENT.value = eventArgument;
theForm.submit();
}
-->
</script>
<input id="Button1" type="button" name="Button1" value="按钮" onclick="javascript:__doPostBack('Button1','')">
方法四:<script language="javascript">
function SubmitKeyClick()
{
if (event.keyCode == 13)
{
event.cancelBubble = true;
event.returnValue = false;
document.all.FunName.value="你要调用的函数名";
document.form[0].submit();
}
}
</script>
<INPUT onkeypress="SubmitKeyClick()" id="aaa" type="text">
<input type="hidden" name="FunName"> 〈!--用来存储你要调用的函数 --〉
在.CS里有:
public Page_OnLoad()
{
if (!Page.IsPost())
{
string strFunName=Request.Form["FunName"]!=null?Request.Form["FunName"]:"";
//根据传回来的值决定调用哪个函数
switch(strFunName)
{
case "enter()":
enter() ; //调用该函数
break;
case "其他":
//调用其他函数
break;
default:
//调用默认函数
break;
}
}
}
public void enter()
{
//……比如计算某值
}
问题2.如何在JavaScript访问C#变量?
答案如下:
方法一:1、通过页面上隐藏域访问<input id="xx" type="hidden" runat="server">
方法二:1、如后台定义了PUBLIC STRING N;前台js中引用该变量的格式为'<%=n%>'或"+<%=n%>+"
方法三:1、或者你可以在服务器端变量赋值后在页面注册一段脚本
"<script language='javascript'>var temp=" + tmp + "</script>"
tmp是后台变量,然后js中可以直接访问temp获得值。
3.如何在C#中访问JavaScript的已有变量?
答案如下:
方法一:1、前台使用静态文本控件隐藏域,将js变量值写入其中;
2、后台用request["id"]来获取值;
方法二:可以用cookie或session
4.如何在C#中访问JavaScript函数?
答案如下:
c#代码中执行javaScript函数:
方法一:1、Page.RegisterStartupScript("ggg","<script>SetVisible(1);</script>");
方法二:使用Literal类,然后
private void Button2_Click(object sender, System.EventArgs e)
{
string str;
str="<script language='javascript'>";
str+="selectRange()";
str+="</script>";
//Literal1.Visible=true;
Literal1.Text=str;
}

2018-11-10 16:41:31 qq_27832057 阅读数 224
版权声明: https://blog.csdn.net/qq_36130706/article/details/79705303

原文地址出:https://github.com/cefsharp/CefSharp/issues/2246

在cefsharp63.02版本下注册绑定事件需要在绑定事件之前申明这段代码。否则不能绑定、报错;

CefSharpSettings.LegacyJavascriptBindingEnabled = true

工程文件与文章(https://www.2cto.com/kf/201801/713008.html)相似;

由于本人还在研究,不胜求解;又因才疏学浅,不足之处,还望前辈们指出;

附源码如下:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using CefSharp;
using CefSharp.WinForms;
using System.IO;


namespace cefSharp
{
    public partial class Form1 : Form
    {
        ChromiumWebBrowser browser;
        public Form1()
        {
            InitializeComponent();
            browser = new ChromiumWebBrowser(@"C:\Users\Administrator\Desktop\cefSharp\cefSharp\test.html");
            browser.Dock = DockStyle.Fill;
            panel1.Controls.Add(browser);
            CefSharpSettings.LegacyJavascriptBindingEnabled = true;//新cefsharp绑定需要优先申明
            browser.RegisterJsObject("boud", new JsEvent(),new CefSharp.BindingOptions() { CamelCaseJavascriptNames = false } );
        }


        private void button1_Click(object sender, EventArgs e)
        {
            browser.ExecuteScriptAsync("oce_one()");
        }
    }
    public class JsEvent
    {
        public string MessageText { get; set; }
        public void ShowTest()
        {
            MessageBox.Show("this in c#.\n\r" + MessageText);


        }
        public void ShowTestArg(string ss)
        {
            MessageBox.Show("收到Js参数的调用\n\r"+ss);
        }
    }
}

				<script>
					(function(){
						function setArticleH(btnReadmore,posi){
							var winH = $(window).height();
							var articleBox = $("div.article_content");
							var artH = articleBox.height();
							if(artH > winH*posi){
								articleBox.css({
									'height':winH*posi+'px',
									'overflow':'hidden'
								})
								btnReadmore.click(function(){
									articleBox.removeAttr("style");
									$(this).parent().remove();
								})
							}else{
								btnReadmore.parent().remove();
							}
						}
						var btnReadmore = $("#btn-readmore");
						if(btnReadmore.length>0){
							if(currentUserName){
								setArticleH(btnReadmore,3);
							}else{
								setArticleH(btnReadmore,1.2);
							}
						}
					})()
				</script>
				</article>
2014-12-08 17:22:28 u010744192 阅读数 596

1. 编译所有 ”Standard Assets”, “Pro Standard Assets” or “Plugins” 目录下的代码

2. 编译所有“Standard Assets/Editor”, “Pro Standard Assets/Editor” or “Plugins/Editor” 目录下的代码

3. 编译除了上面列出来的目录和Editor目录之外的所有代码

4. 编译Editor目录下的代码

这样的话,如果你希望某个Javascript能被其他脚本引用,那么把它放到第一组的某个目录里,然后把要使用它的代码放在第三组的某个目录里就好了。

同样,如果希望某个C#代码能被其他Javascript脚本引用,也必须把这个C#脚本放到第一组的某个目录里,Javascript代码放到第三组的某个目录里。

  • 同种语言,第一组目录中的文件调用第三组目录中的文件,以JavaScript为例

    GO_ScoreGlobalUNL.SendMessage("OnBillingSuccess", index, SendMessageOptions.DontRequireReceiver);
    

GO_ScoreGlobalUNL被调用的GameObject,OnBillingSuccess被调用的方法,index参数。

2015-09-11 09:53:48 oiooooio 阅读数 591

这几天又开始了用 c#写窗口程序,自认为用c#做窗口程序太简单了,比那什么mfc简单太多,当然可能QT等库也是比较简单,我就懒得去学习了。


        //[return: MarshalAs(UnmanagedType.LPStr)]
        //[MarshalAs(UnmanagedType.LPStr)]


废话短说,我做一个服务器测试程序,也只有跟用户交互的部分是使用的c#窗口,其他都是c++ dll。

然后肯定会出现c#调用c++的问题,这个很容易解决,c#代码的写法如下:

        [DllImport("TestCommand.dll", EntryPoint = "StartRun", CallingConvention=CallingConvention.StdCall)]
        public static extern int StartRun(string ip, UInt16 port, StringBuilder out_err_msg, int msg_buffer_length); 

        [DllImport("TestCommand.dll", EntryPoint = "Register", CallingConvention=CallingConvention.StdCall)]
        public static extern int Register(string name_or_tel, string pwd, int reg_type, StringBuilder out_err_msg, int msg_buffer_length); 

那么c# 如何调用:

        private void RunNetIO(string ip, UInt16 port)
        {
            ThreadSynUIFunc ui_func = new ThreadSynUIFunc(ThreadSynUIFuncImpl);
            this.Invoke(ui_func, new object[] { eUIControl._register, false });

            StringBuilder out_err_msg = new StringBuilder(512);
            int ret_val = ImCommand.StartRun(ip, port, out_err_msg, 512);
            if(ret_val != Common.RET_INT_OK)
            {
                MessageBox.Show(out_err_msg.ToString());
            }

            this.Invoke(ui_func, new object[] { eUIControl._register, true });
        }

        private void ThreadSynUIFuncImpl(eUIControl ui, bool enabled)
        {
            switch(ui)
            {
                case eUIControl._register:
                    bt_connect.Enabled = enabled;
                    break;
            }
        }

        private void button_register_Click(object sender, EventArgs e)
        {
            int reg_type = Convert.ToInt32(rb_name.Tag);
            if (rb_tel.Checked) { reg_type = Convert.ToInt32(rb_tel.Tag); }
            StringBuilder out_err_msg = new StringBuilder(512);
            int ret_val = ImCommand.Register(tb_name_tel.Text, tb_pwd.Text, reg_type, out_err_msg, 512);
            if (ret_val != Common.RET_INT_OK)
            {
                MessageBox.Show(out_err_msg.ToString());
            }
        }
    }



cpp的写法:

int AssignReturnVal(char* d, int d_len, const char* s, int return_val)
{
	int s_len = strlen(s);
	if (s_len > d_len)
	{
		s_len = d_len;
	}
	strncpy_s(d, d_len, s, s_len);
	return return_val;
};

template<class Func, class... Args>
int ExecImpl(Func func, char* out_err_msg, int in_msg_buffer_length, Args... args)
{
	try{ func(args...); }
	catch (const char* ex){ return AssignReturnVal(out_err_msg, in_msg_buffer_length, ex, RET_INT_FAIL); }	
	catch (std::exception ex){ return AssignReturnVal(out_err_msg, in_msg_buffer_length, ex.what(), RET_INT_FAIL); }
	return AssignReturnVal(out_err_msg, in_msg_buffer_length, RET_STR_OK, RET_INT_OK);
}


extern "C"
{
	TESTCOMMAND_API int __stdcall StartRun(const char* ip, 
		uint16_t port, char* out_err_msg, int in_msg_buffer_length)
	{
		if (!ip || strlen(ip) == 0 || port <= 1000)
		{
			AssignReturnVal(out_err_msg, in_msg_buffer_length, "ip or port invalid.", RET_INT_FAIL);
		}
		return ExecImpl(std::bind(&BoostNet::Run, &BOOSTNET, ip, port), out_err_msg, in_msg_buffer_length);
	}

	TESTCOMMAND_API int __stdcall Register(const char* name_or_tel,
		const char* pwd, int reg_type, char* out_err_msg, int in_msg_buffer_length)
	{
		return ExecImpl(NetCommand::Register, out_err_msg, in_msg_buffer_length, name_or_tel, pwd, reg_type);
	}

}



就这样没什么难度,那么如果c++要调用c#函数呢,比如来消息了,c++网络层总要通知c#窗口吧。

比如c++想要传递给c#:

typedef void (__stdcall *FUNC_ARGC_3)(uint64_t msg_id, const char* title, const char* des);
FUNC_ARGC_3 _g_func_3 = nullptr;
那么,c++该怎么写,c# 该怎么写?

ok,下面展示2个例子,不但是供我以后参考,也希望帮助些朋友。

第一部分:

------------------------------------------------

cpp文件:

typedef void (__stdcall *FUNC_ARGC_3)(uint64_t msg_id, const char* title, const char* des);
FUNC_ARGC_3 _g_func_3 = nullptr;

extern "C"
{
	TESTCOMMAND_API void __stdcall SetCallBackFunc(void* func, int argc)
	{
		switch (argc)
		{
		case 3:
			_g_func_3 = (FUNC_ARGC_3)func;
			return;
		}
	}
}

h文件:
extern "C"
{
	//typedef void(*FUNC_ARGC_3)(uint64_t msg_id, const char* title, const char* des);
	TESTCOMMAND_API void __stdcall SetCallBackFunc(void* func, int argc);
}

关键部分,c#:

        //typedef void(*FUNC_SENDFAIL_CALLBACK)(int);
        public delegate void FUNC_SET_CALLBACK_SENDFAIL(int proto_id);
        [DllImport("TestCommand.dll", EntryPoint = "SetSendFailedCallbackFunc", CallingConvention = CallingConvention.StdCall)]
        public static extern void SetSendFailedCallbackFunc(FUNC_SET_CALLBACK_SENDFAIL func);

        //typedef void(*FUNC_ARGC_3)(uint64_t msg_id, const char* title, const char* des);
        public delegate void FUNC_SET_CALLBACK_3(UInt64 msg_id, string title, string des);
        [DllImport("TestCommand.dll", EntryPoint = "SetCallBackFunc", CallingConvention = CallingConvention.StdCall)]
        public static extern void SetCallBackFunc_3(FUNC_SET_CALLBACK_3 func, int argc);

        public Form1()
        {
            InitializeComponent();

            ImCommand.SetSendFailedCallbackFunc(new ImCommand.FUNC_SET_CALLBACK_SENDFAIL(Callback_sendfail));
            ImCommand.SetCallBackFunc_3(new ImCommand.FUNC_SET_CALLBACK_3(Callback_argc_3), 3);
        }

        private void Callback_sendfail(int proto_id)
        {
            MessageBox.Show(string.Format("send msg[{0}] fail.", proto_id));
        }

        private void Callback_argc_3(UInt64 msg_id, string title, string des)
        {
            MessageBox.Show(string.Format("[{0}:{1}]", msg_id, des), title);
        }

注意:或许你可能发现,c#多了一部分代码,多的那一部分对应的c++代码将在下面展示,下面第二部分就不在展示c#代码了!!! 请各就各位。


第二部分的c++代码:

-----------------------------------------------

h:

extern "C"
{
	//typedef void(*FUNC_SENDFAIL_CALLBACK)(int);
	TESTCOMMAND_API void __stdcall SetSendFailedCallbackFunc(void* func);
}

cpp:

typedef void(__stdcall *FUNC_SENDFAIL_CALLBACK)(int);
FUNC_SENDFAIL_CALLBACK _g_func_send_fail_callback = nullptr;

extern "C"
{
	TESTCOMMAND_API void __stdcall SetSendFailedCallbackFunc(void* func)
	{
		_g_func_send_fail_callback = (FUNC_SENDFAIL_CALLBACK)func;
	}
}


ok,希望 我的废话不多,能给朋友一些直接参考!

没有更多推荐了,返回首页