这是个经常遇到的问题,我在winform中做了个用户登录的界面,输入用户名和密码后登录会提示“未将对象引用设置到对象的实例”,详细如下:
未处理 System.NullReferenceException
Message="未将对象引用设置到对象的实例。"
Source="CRM_Login"
StackTrace:
在 lengku48.Form1.button1_Click(Object sender, EventArgs e) 位置 E:\冷库48\Form1.cs:行号 112
在 System.Windows.Forms.Control.OnClick(EventArgs e)
在 System.Windows.Forms.Button.OnClick(EventArgs e)
在 System.Windows.Forms.Button.PerformClick()
在 System.Windows.Forms.Form.ProcessDialogKey(Keys keyData)
在 System.Windows.Forms.Control.ProcessDialogKey(Keys keyData)
在 System.Windows.Forms.Control.ProcessDialogKey(Keys keyData)
在 System.Windows.Forms.TextBoxBase.ProcessDialogKey(Keys keyData)
在 System.Windows.Forms.Control.PreProcessMessage(Message& msg)
在 System.Windows.Forms.Control.PreProcessControlMessageInternal(Control target, Message& msg)
在 System.Windows.Forms.Application.ThreadContext.PreTranslateMessage(MSG& msg)
在 System.Windows.Forms.Application.ThreadContext.System.Windows.Forms.UnsafeNativeMethods.IMsoComponent.FPreTranslateMessage(MSG& msg)
在 System.Windows.Forms.Application.ComponentManager.System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop(Int32 dwComponentID, Int32 reason, Int32 pvLoopData)
在 System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner(Int32 reason, ApplicationContext context)
在 System.Windows.Forms.Application.ThreadContext.RunMessageLoop(Int32 reason, ApplicationContext context)
在 System.Windows.Forms.Application.Run(Form mainForm)
在 lengku48.Program.Main() 位置 E:\冷库48\Program.cs:行号 17
在 System.AppDomain._nExecuteAssembly(Assembly assembly, String[] args)
在 System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args)
在 Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
在 System.Threading.ThreadHelper.ThreadStart_Context(Object state)
在 System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
在 System.Threading.ThreadHelper.ThreadStart()
InnerException:
出错位置:
- C# code
private void button1_Click(object sender, EventArgs e) { SqlDataReader sdr = null; if (String.IsNullOrEmpty(txt_LoginName.Text.Trim())) { MessageBox.Show("登录用户不许为空!", "软件提示"); txt_LoginName.Focus(); return; } if (String.IsNullOrEmpty(txt_LoginPwd.Text)) { MessageBox.Show("登录密码不许为空!", "软件提示"); txt_LoginPwd.Focus(); return; } //用户编码不重复 string strSql = "select * from Operator where OperatorCode = '" + txt_LoginName.Text.Trim() + "'"; try { sdr = dal.GetDataReader(strSql); if (!sdr.HasRows) //若该用户编码无数据记录 { MessageBox.Show("登录用户不正确!", "软件提示"); txt_LoginName.Focus(); } else { sdr.Read(); //读取唯一的一行记录 if (!(txt_LoginPwd.Text == sdr["Password"].ToString())) //若密码不相同 { MessageBox.Show("登录密码不正确!", "软件提示"); txt_LoginPwd.Focus(); } else { GlobalProperty.OperatorCode = sdr["OperatorCode"].ToString(); GlobalProperty.OperatorName = sdr["OperatorName"].ToString(); GlobalProperty.Password = sdr["Password"].ToString(); GlobalProperty.IsFlag = sdr["IsFlag"].ToString(); //this.Hide(); timer1.Start(); } } } catch (Exception ex) { MessageBox.Show(ex.Message, "软件提示"); } finally { [color=#FF0000]sdr.Close();[/color]//出错代码 } }