当前位置:编程学习 > C#/ASP.NET >>

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#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,