我的程序是winform+Webservice结构的程序,不知道什么原因会出现【尝试读取或写入受保护的内存。这通常指示其他内存已损坏】的错误

解决方案 »

  1.   


    空洞的说法。这是不安全代码造成的,你用了它,使用时间越长,bug爆发的机会越大。
      

  2.   

    string PPSQL = "";
                if (this.radioGroup1.SelectedIndex >= 0)
                    if (this.radioGroup1.Properties.Items[this.radioGroup1.SelectedIndex].Description != "全部品牌")
                    {
                        PPSQL = "stk_pp = '" + this.radioGroup1.Properties.Items[this.radioGroup1.SelectedIndex].Description + "'";
                    }
                if (textBox1.Text.Trim() == "")
                    SearchSQL = "";
                else
                    SearchSQL = "Stk_Name like '%" + textBox1.Text.Trim() + "%' OR Stk_NoEx like '%" + textBox1.Text.Trim() + "%' OR stk_pp like '%" + textBox1.Text.Trim() + "%' OR stk_group like '%" + textBox1.Text.Trim() + "%' OR stk_Car like '%" + textBox1.Text.Trim() + "%' OR stk_BarCode like '%" + textBox1.Text.Trim() + "%'";
                if (PPSQL.Trim() != "")
                {
                    if (SearchSQL.Trim() == "")
                        SearchSQL = PPSQL;
                    else
                        SearchSQL = "(" + SearchSQL + ") and " + PPSQL;
                }
                CurPage = 1;
                LoadProdPJ();private void LoadProdPJ()
            {
                
                try
                {
                    this.Cursor = Cursors.WaitCursor;
                    try
                    {
                        W4SWebRef.JXC4SWeb.JXCDataBase.dm_prod_pjDataTable tb = WS.dm_prod_pjList(UserNo, UserPwd, MyDes.EnStr(SearchSQL), CurPage, ref TotalPage, ref sErr);
                        if (sErr != "1")
                        {
                            MessageBox.Show("发生错误!原因:" + sErr, "提示");
                            return;
                        }
                        this.dmprodpjBindingSource.DataSource = tb;
                        toolStripTextBox1.Text = Convert.ToString(CurPage);
                        toolStripLabel2.Text = "页/共" + Convert.ToString(TotalPage) + "页,每页50行";
                        if (tb != null)
                            tb.Dispose();
                    }
                    catch
                    {
                        MessageBox.Show("错误!", "操作提示", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                        return;
                    }
                }
                finally
                {
                    this.Cursor = Cursors.Default;
                }
            }请问这代码算不安全代码吗?就是这些代码在某些电脑上有时会出现【尝试读取或写入受保护的内存。这通常指示其他内存已损坏】的错误
      

  3.   

    貌似这句:
    W4SWebRef.JXC4SWeb.JXCDataBase.dm_prod_pjDataTable tb = WS.dm_prod_pjList(UserNo, UserPwd, MyDes.EnStr(SearchSQL), CurPage, ref TotalPage, ref sErr);
      

  4.   

    貌似是数据类型出错 好比c++里的long c#要写成Int32一样 LZ仔细检查下