c#二次开发消息扑捉写入数据库失败
1)在调试的时候,是可以通过的;在客户机上,到写入数据库的时候就崩溃了;没任何提示,窗口一闪而过,没了;2)
代码如下:
#region BT Dll
[DllImport("BT.dll", EntryPoint = "InitializationBTDriver")]
public static extern bool InitializationBTDriver(GetTelID x, int y, int z);
[DllImport("BT.dll", EntryPoint = "InitializationMsg")]
public static extern bool InitializationMsg(int hwd);
[DllImport("BT.dll", EntryPoint = "ExitBTDriver")]
public static extern bool ExitBTDriver();
[DllImport("BT.dll", EntryPoint = "GetCall")]
public static extern bool GetCall(StringBuilder i);
[DllImport("BT.dll", EntryPoint = "GetConnect")]
public static extern bool GetConnect();
//消息
public const int BTSTATUS_CALL = 0x0D;
public const int WM_WTEL= 1024 + 260;
#endregion
private void Form1_Load(object sender, EventArgs e)
{
this.listBox1.Items.Clear();
this.listBox2.Items.Clear();
this.label1.Text = "未连接!";
this.button1.Enabled = false;
toolStripStatusLabel1.Text = "";
try
{
telnum = ConfigurationManager.AppSettings["telnum"];
wlcom = Convert.ToInt16(ConfigurationManager.AppSettings["wlCom"]);
wlTel = ConfigurationManager.AppSettings["wlTel"];
//加载初始化
Thread t1 = new Thread(new ThreadStart(this.initWLTel));
t1.Start();
}
catch(Exception em)
{
MessageBox.Show("因为部分部件不存在,可能部分功能不可用!"+em.Message);
}
}
private void initWLTel()
{
if (this.InvokeRequired)
{
autoTel ts = new autoTel(this.initWLTel);
this.Invoke(ts);
}
else
{
try
{
//GetTelID委托类型,定义省略
GetTelID tst=new GetTelID(this.GetID);
bool i2 = InitializationBTDriver(tst, wlcom, Handle.ToInt32());
if (!i2)
{
groupBox1.Enabled = false;
}
else
{
listBox2.Items.Add("以连接至:" + wlTel);
bool i1 = InitializationMsg(Handle.ToInt32());
}
}
catch (Exception em)
{
MessageBox.Show(em.Message);
}
}
}
//初始化的回调函数
private void GetID(int x, string y, int z)
{
;
}
//显示到form控件上
private void setWLID(string k,int telType,ListBox lb1,string allTelNum)
{
if (lb1.InvokeRequired)
{
setIDToLabel ls = new setIDToLabel(this.setWLID);
lb1.Invoke(ls, new object[] { k, telType, lb1, allTelNum });
}
else
{
string tmp1 = DateTime.Now.ToString();
string tmp2 = tmp1 + " " + k;
lb1.Items.Add(tmp2);
lb1.SelectedIndex = lb1.Items.Count - 1;
}
}
//保存到数据库
private void sveData(string k, UInt16 telType, string allTelNum)
{
if (this.InvokeRequired)
{
dlsvDt ts = new dlsvDt(this.sveData);
this.Invoke(ts,new object[]{k,telType,allTelNum});
}
else
{
try
{
string connectionString1 = ConfigurationManager.ConnectionStrings["sql"].ConnectionString;
using (SqlConnection cn = new SqlConnection(connectionString1))
{
try
{
string sql = "insert into telList(tel,telFrom,mTelType,telTo)values(@telID,@IPAddr,@telType,@telTo)";
SqlCommand cmd = new SqlCommand(sql, cn);
cmd.Connection.Open();
cmd.Parameters.Add("@telID", SqlDbType.NVarChar, 20).Value = k;
cmd.Parameters.Add("@IPAddr", SqlDbType.NVarChar, 20).Value = GetIP();
cmd.Parameters.Add("@telType", SqlDbType.Bit, 1).Value = telType;
cmd.Parameters.Add("@telTo", SqlDbType.NVarChar, 20).Value = allTelNum;
cmd.ExecuteNonQuery();
cmd.Connection.Close();
}
catch (SqlException em)
{
string fPath = AppDomain.CurrentDomain.BaseDirectory + "\\tellist.txt";
using (StreamWriter wFile = new StreamWriter(fPath, true))
{
wFile.WriteLine(k + "," + GetIP() + "," + telType + "," + allTelNum + "," + DateTime.Now);
}
}
}
}
catch (Exception em)
{
MessageBox.Show(em.Message);
}
}
}
//消息处理
protected override void DefWndProc(ref Message m)
{
switch(m.Msg)
{
case WM_WTEL:
OnWTEL(m.WParam, m.LParam);
break;
default:
base.DefWndProc(ref m);
break;
}
}
private string telTg = "";//去掉重复
private void OnWTEL(IntPtr wParam, IntPtr lParam)
{
int nMsg = new int();
int nLine = new int();
nMsg = wParam.ToInt32() % 65536;
nLine = wParam.ToInt32() / 65536;
switch (nMsg)
{
case BTSTATUS_CALL:
StringBuilder telID1 = new StringBuilder();
string telNum1 = "";
GetCall(telID1);//获取号码
telNum1 = telID1.ToString();
if (telTg != telNum1 && telNum1 != "")
{
setWLID(telNum1, 1, listBox2, wlTel);//显示到控件
sveData(telNum1.ToString(), 1, wlTel);//保存到数据库,本地测试通过,到客户机上这句无法执行;没有任何的报错的信息,程序就崩溃了(这里的sql语句都无法执行)。怎么才能让他执行并且不关闭程序?在调试机上完全没有问题,到客户机就不行了。
telTg = telNum1;
}
break;
}
} 数据库 C# 二次开发 --------------------编程问答-------------------- 在写数据库的地方,catch异常将异常信息show出来,或者加入日志功能,写文本文件。 --------------------编程问答-------------------- #1,我也想,也写了catch,不执行。 --------------------编程问答-------------------- 谁来help me --------------------编程问答-------------------- 如果什么方法都不管用,最直接的方法就是在客户机上安装vs,调试模式下将错误重现。这事情我曾干过。 --------------------编程问答-------------------- 安装了,无用。 --------------------编程问答-------------------- 有谁做过类似的开发,获取手机的来电显示的,联系本人,
补充:.NET技术 , C#