可以运行,但却没有实现事务的功能(锁定),请大家帮忙一下~~~那个 cmd.CommandText =  应该错了,请指正,谢哦!!using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Data.SqlClient;
using System.Configuration;
using System.Transactions;namespace Picture_Viewer
{
    public partial class lockr : Form
    {        SqlDataAdapter da;
        SqlConnection cn;
        DataSet ds;
        public lockr()
        {
            InitializeComponent();
        }                private void lockr_Load(object sender, EventArgs e)
        {
            btnup.Enabled = false;
            ds = new DataSet();
            cn = new SqlConnection();
            cn.ConnectionString = "server=192.168.1.104;database=getage;uid=sa;pwd=123";
            cn.Open();
            da = new SqlDataAdapter("select * from stu", cn);
            SqlCommandBuilder sc = new SqlCommandBuilder(da);
            da.Fill(ds, "stu");            dataGridView1.DataSource = ds.Tables[0];
            dataGridView1.Columns[2].Visible = false;
            cn.Close();
                }        private void btnlock_Click(object sender, EventArgs e)
        {
            btnup.Enabled = true;
           
           cn = new SqlConnection("server=192.168.1.104;database=getage;uid=sa;pwd=123");//初始化连接 
            cn.Open();
            SqlCommand cmd = cn.CreateCommand();
             SqlTransaction sqlTransaction = cn.BeginTransaction(System.Data.IsolationLevel.Serializable); //   开启事务 
             cmd.Connection = cn;   
             cmd.Transaction   =   sqlTransaction; //   将事务应用于Command     
    
              try   
             {   
                 //   利用sqlcommand进行数据操作 
                 cmd.CommandText = "select * from stu with(rowlock) ";               
                 cmd.ExecuteNonQuery();               
               sqlTransaction.Commit(); //   成功提交 
                                btnup.Enabled = true;
               MessageBox.Show("锁定成功!");
               }   
              catch(Exception   ex)   
            {                sqlTransaction.Rollback();    //   出错回滚  
                btnup.Enabled = false;//继续不可提交;
                MessageBox.Show("出错了,大哥!!");        }            }        private void btnup_Click(object sender, EventArgs e)
        {
            da.Update(ds,"stu");
            MessageBox.Show("上交成功,好样的!!");
        }    
    }
}

解决方案 »

  1.   

    HOLDLOCK 持有共享锁,直到整个事务完成,应该在被锁对象不需要时立即释放,等于SERIALIZABLE事务隔离级别 NOLOCK 语句执行时不发出共享锁,允许脏读 ,等于 READ UNCOMMITTED事务隔离级别 PAGLOCK 在使用一个表锁的地方用多个页锁 READPAST 让sql server跳过任何锁定行,执行事务,适用于READ UNCOMMITTED事务隔离级别只跳过RID锁,不跳过页,区域和表锁 ROWLOCK 强制使用行锁 TABLOCKX 强制使用独占表级锁,这个锁在事务期间阻止任何其他事务使用这个表 UPLOCK 强制在读表时使用更新而不用共享锁 
      

  2.   

    代码好像没问题啊  SQL语句有问题没
      

  3.   

    是不是应该将
    cmd.Transaction  =  sqlTransaction; //  将事务应用于Command    
    放在try模块里哈 
    感觉 没什么问题哈
    你试下吧
      

  4.   

    还有 你问什么用using System.Transactions; 
    好像没用到哈
      

  5.   

    事务就是确保SQL能够正确执行
      

  6.   


    跟你说明一下:在锁定成功时执行了这句代码时sqlTransaction.Commit(); //  成功提交 
    锁就给释放掉了 所以就达不到锁的目的,下面的代码已经能锁表了。你试试SqlTransaction sqlTransaction = null;
            private void btnlock_Click(object sender, EventArgs e)
            {
                SqlConnection cn = new SqlConnection("server=.;database=ClothingSaleDB;uid=sa;pwd=1");//初始化连接 
                cn.Open();
                SqlCommand cmd = cn.CreateCommand();
                sqlTransaction = cn.BeginTransaction(System.Data.IsolationLevel.Serializable); //  开启事务 
                cmd.Connection = cn;
                cmd.Transaction = sqlTransaction; //  将事务应用于Command    
                try
                {
                    //  利用sqlcommand进行数据操作 
                    cmd.CommandText = "select * from aaa";
                    cmd.ExecuteNonQuery();
                    MessageBox.Show("锁定成功!");
                    //sqlTransaction.Commit(); //  成功提交 
                }
                catch (Exception ex)
                {
                    sqlTransaction.Rollback();    //  出错回滚  
                    //btnup.Enabled = false;//继续不可提交; 
                    MessageBox.Show(ex.Message);
                }
            }        private void button3_Click(object sender, EventArgs e)
            {
                sqlTransaction.Commit(); //  成功提交 
                MessageBox.Show("解锁");
            }
            private void button2_Click(object sender, EventArgs e)
            {
                //Application.DoEvents();  
                if (!backgroundWorker1.IsBusy)
                    backgroundWorker1.RunWorkerAsync();
            }                private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
            {
                SqlConnection cn = new SqlConnection("server=.;database=ClothingSaleDB;uid=sa;pwd=1");//初始化连接 
                cn.Open();
                SqlCommand cmd = cn.CreateCommand();
                cmd.CommandText = "insert into aaa values('11')";
                cmd.ExecuteNonQuery();        }        private void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
            {
                MessageBox.Show("上交成功,好样的!!");
            }
      

  7.   

    哈哈,好!!!先谢谢你了,果然好球~~~~先测试一下~看问题解决没有,GOD WITH YOU~~~!!!