当前位置: 代码迷 >> C# >> c#连接数据库后怎么把程序获取的数据写入数据库
  详细解决方案

c#连接数据库后怎么把程序获取的数据写入数据库

热度:235   发布时间:2016-05-05 05:17:55.0
c#连接数据库后如何把程序获取的数据写入数据库
本帖最后由 shuxinwei 于 2013-06-12 13:27:43 编辑
我打算写一个C#连接数据库登录的小程序,其他的功能都已经写好,就是在验证用户名和密码之后把本机的IP写入数据库,这个时候调试出现问题,提示数据库未初始化,改了半天也改不明白,求各位大牛帮忙看看,多谢

数据库结构如下:
数据库名:LoginDetail
UID------存放用户名
PWD------存放密码
IPaddr---存放IP地址


代码如下:



------------------------------------分割线--------------------------------------------------------



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 System.Data.SqlClient;
using System.Net;

namespace WindowsFormsApplication1
{
    public partial class Form2 : Form
    {
        public Form2()
        {
            InitializeComponent();
        }

        //获取本机IP,然后存储在strAddr中
        public string getLocalIP()
        {
            string strHostName = Dns.GetHostName(); //得到本机的主机名
            IPHostEntry ipEntry = Dns.GetHostEntry(strHostName); //取得本机IP
            string strAddr = ipEntry.AddressList[0].ToString();
            return (strAddr);
        }

        private void button1_Click(object sender, EventArgs e)
        {
            string username;
            string password;
            string LocalIP;
            string DBIP1 = "";

            LocalIP = getLocalIP();
            string dataDir = AppDomain.CurrentDomain.BaseDirectory;
            if (dataDir.EndsWith(@"\bin\Debug\")
                || dataDir.EndsWith(@"\bin\Release\"))
            {
                dataDir = System.IO.Directory.GetParent(dataDir).Parent.Parent.FullName;
                AppDomain.CurrentDomain.SetData("DataDirectory", dataDir);
            }

            //定义用户名和密码变量  
            username = textBox1.Text;
            password = textBox2.Text;
            
            //使用创建数据库连接  
            using (SqlConnection conn = new SqlConnection(@"Data Source=数据库;Initial Catalog=xxx;User ID=数据库用户名;Password=密码"))
            {
                conn.Open();//打开数据库  

                //获取数据库中当前登录名的IP字段,存储与DBIP1中
                using (SqlCommand getDBIP = conn.CreateCommand())
                {
                    getDBIP.CommandText = "select * from LoginDetail where UID='" + username + "'";
                    using (SqlDataReader DBIP = getDBIP.ExecuteReader())
                        if (DBIP.Read())
                        {
                            DBIP1 = DBIP.GetString(DBIP.GetOrdinal("IPaddr"));
                        }
                }
                using (SqlCommand cmd = conn.CreateCommand())
                {
                    //查询命令为:查询UserName等于输入的用户名  
                    cmd.CommandText = "select * from LoginDetail where UID='" + username + "'";
                    //将查询到的数据保存在reader这个变量里  
                    using (SqlDataReader reader = cmd.ExecuteReader())
                    {
                        //如果reader.Read()的结果不为空, 则说明输入的用户名存在  
                        if (reader.Read())
                        {
                            /*从数据库里查询出和用户相对应的PassWorld的值 
                             *reader.GetOrdinal("PassWord")的作用是得到PassWord的为这行数据中的第几列,返回回值是int 
                             *reader.GetString()的作用是得到第几列的值,返回类型为String. 
                             */

                            string dbpassword = reader.GetString(reader.GetOrdinal("PWD"));
                            //比较用户输入的密码与从数据库中查询到的密码是否一至,如果一至,就登录成功  
                            if (password == dbpassword)
                            {
                                if (DBIP1 == "")//如果数据库中当前登录的ID有记录IP地址,则拒绝登录
                                {
                                    Form1 form1 = new Form1();
                                    
                                    /*下面几句在调试的时候出现问题,提示“System.InvalidOperationException”类型的未经处理的异常在 System.Data.dll 中发生其他信息: ExecuteNonQuery: Connection property has not been initialized.我本来的意思是:如果登录成功,则把当前电脑的IP地址写入数据库中该用户名下面,当然,在该用户退出的时候我会在数据库中删除该IP,此处作用是限制一个用户在多处登录*/
                                    
                                    string updatelocalIP = "update LoginDetail set IPaddr='" + LocalIP + "' where UID ='" + username + "'";
                                    SqlCommand conn2 = new SqlCommand(updatelocalIP);
                                    conn2.ExecuteNonQuery();

                                    form1.Show();
                                    conn.Close();
                                    this.Visible = false;
                                }
                                else
                                {
                                    MessageBox.Show("查询系统工号已在IP:" + DBIP1 + "上登录,请联系IT处理并修改密码", "登录异常");
                                }
                            }
                            else
                            {
                                //如果不相等,说明密码不对  
                                MessageBox.Show("密码有误,请重新输入");
                                textBox2.Focus();
                                textBox2.SelectAll();
                            }

                        }
                        else
                        {
                            //说明输入的用户名不存在  
                            MessageBox.Show("用户名不存在,请重新输入");
                            textBox1.Focus();
                            textBox1.SelectAll();
                        }
                    }

                }

            }        

        }

        private void button2_Click(object sender, EventArgs e)
        {
            Application.Exit();
        }
    }
}
------解决思路----------------------

//这句错了 这句话没有关联SqlConnection 导致Command没有对应的连接来执行sql语句
SqlCommand conn2 = new SqlCommand(updatelocalIP);



------解决思路----------------------
SqlCommand conn2 = new SqlCommand(updatelocalIP);

改为:

SqlCommand conn2 = new SqlCommand(updatelocalIP,conn);
  相关解决方案