110,531
社区成员
发帖
与我相关
我的任务
分享
private DataSet ds1 = new DataSet();//设置为ds
private DataSet ds2 = new DataSet();//设置为ds
private SqlDataAdapter da1;//设置为da
private SqlDataAdapter da2;//设置为da
//...ds3 4 5 6.. da3 4 5 6....
String ZU1_h1,ZU1_h2,ZU1_h3,ZU1_h4,ZU1_h5,ZU1_h6;//取出dataGridView1某列N行的值
String ZU2_h1,ZU2_h2,ZU2_h3,ZU2_h4,ZU2_h5,ZU2_h6;//取出dataGridView2某列N行的值
//.......
Socket Sokt1;//定义一个Socket类的对象
Socket Sokt2;//定义一个Socket类的对象
//.....
Thread th1;//定义一个Thread类的对象,进程
Thread th2;//定义一个Thread类的对象,进程
//.....
private void FormMain_Load(object sender, EventArgs e)
{
try
{
string sql1 = "Select * From biao Where Crew=1 order by Code asc";
da1 = new SqlDataAdapter(sql1, Conn.rs);
da1.Fill(ds1, "ZU1");
Dgv1.DataSource = ds1.Tables["ZU1"];
}
catch (Exception excha1)
{
//..
}
finally
{
Conn.rs.Close();
}
Thread.Sleep(50);
try
{
string sql2 = "Select * From biao Where Crew=2 order by Code asc";
da2 = new SqlDataAdapter(sql2, Conn.rs);
da2.Fill(ds2, "ZU2");
Dgv2.DataSource = ds2.Tables["ZU2"];
}
catch (Exception excha2)
{
//..
}
finally
{
Conn.rs.Close();
}
//sql3 4 5 6.... ZU3 4 5 6...
}
private void Timer1_Tick(object sender, EventArgs e)
{
ds1.Tables["ZU1"].Clear();
da1.Fill(ds1, "ZU1");
ZU1_h1 = Dgv1.Rows[0].Cells["Code1"].Value.ToString().Trim();//Dgv第一行
ZU1_h2 = Dgv1.Rows[1].Cells["Code1"].Value.ToString().Trim();//Dgv第二行
ZU1_h3 = Dgv1.Rows[2].Cells["Code1"].Value.ToString().Trim();//Dgv第三行
ZU1_h4 = Dgv1.Rows[3].Cells["Code1"].Value.ToString().Trim();//Dgv第四行
ZU1_h5 = Dgv1.Rows[4].Cells["Code1"].Value.ToString().Trim();//Dgv第五行
ZU1_h6 = Dgv1.Rows[5].Cells["Code1"].Value.ToString().Trim();//Dgv第六行
}
private void Timer2_Tick(object sender, EventArgs e)
{
ds2.Tables["ZU2"].Clear();
da2.Fill(ds2, "ZU2");
ZU2_h1 = Dgv2.Rows[0].Cells["Code2"].Value.ToString().Trim();//Dgv第一行
ZU2_h2 = Dgv2.Rows[1].Cells["Code2"].Value.ToString().Trim();//Dgv第二行
ZU2_h3 = Dgv2.Rows[2].Cells["Code2"].Value.ToString().Trim();//Dgv第三行
ZU2_h4 = Dgv2.Rows[3].Cells["Code2"].Value.ToString().Trim();//Dgv第四行
ZU2_h5 = Dgv2.Rows[4].Cells["Code2"].Value.ToString().Trim();//Dgv第五行
ZU2_h6 = Dgv2.Rows[5].Cells["Code2"].Value.ToString().Trim();//Dgv第六行
}
//定时刷新...共8个dataGridView
//定义多线程1
private void BeginListen1()//接收发送连接
{
IPAddress ip = Dns.GetHostEntry(Dns.GetHostName()).AddressList[0];//获取本机IP
IPEndPoint ipe = new IPEndPoint(ip, 10000);//实例化一个服务器端指定端口的IPEndPoint
Sokt1 = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);//创建一个套接字的TCP/IP
try
{
Sokt1.Bind(ipe);//将套接字绑定到本地端点
Sokt1.Listen(390);//侦听传入的连接,允许最大连接数
//循环接收并处理数据
while (true)
{
Socket skt = Sokt1.Accept();//在等待一个传入的连接
skt.ReceiveTimeout = 6000;//接收超时,n毫秒
Byte[] by = new Byte[80];//定义接收字节数组,接收长度
Int32 byRec = skt.Receive(by);//接收数据int
String data = Encoding.ASCII.GetString(by, 0, byRec);//收到的数据
//取值
String Hang1 = ZU1_h1;
String Hang1 = ZU1_h2;
String Hang1 = ZU1_h3;
String Hang1 = ZU1_h4;
String Hang1 = ZU1_h5;
String Hang1 = ZU1_h6;
if (Hang1.Length != 0)//Dgv第一行,有人在线
{
try
{
Int32 result = 0;
string sql = string.Format("Update Abiao Set Code='" + ZU1_h1 + "' Where ID=1");
SqlCommand cmd = new SqlCommand(sql, Conn.rs);
Conn.rs.Open();
result = cmd.ExecuteNonQuery();
if (result < 1)
{
new SqlCommand("Update Bbiao Set Code='' Where BLie='" + ZU1_h1 + "'", Conn.rs).ExecuteNonQuery();
}
else
{
new SqlCommand("Insert Into Cbiao (Code)values('" + ZU1_h1 + "')", Conn.rs).ExecuteNonQuery();
}
}
catch (Exception ex)
{
//...
}
finally
{
Conn.rs.Close();
}
}
Thread.Sleep(15);//多线程延迟N毫秒
skt.Shutdown(SocketShutdown.Both);//发送和接收,二者都结束
skt.Close();//关闭连接
}
}
catch (Exception ex)
{
//...
}
}
//定义多线程2
private void BeginListen2()//接收发送连接
{
//......
}
//定义多线程2 4 5 6......
//点击按钮启动线程1
private void btnStart1_Click(object sender, EventArgs e)
{
th1 = new Thread(new ThreadStart(BeginListen1));//创建一个新的线程专门用于处理监听
th1.IsBackground = true;
th1.Start();//启动线程
}
//点击按钮启动线程2
private void btnStart2_Click(object sender, EventArgs e)
{
th2 = new Thread(new ThreadStart(BeginListen2));//创建一个新的线程专门用于处理监听
th2.IsBackground = true;
th2.Start();//启动线程
}
//点击按钮启动线程2 4 5 6.......
OracleConnection conn = null;
DataTable dataTable = null;
try
{
conn = new OracleConnection(conStr);
conn.Open();
OracleCommand cmd = new OracleCommand();
cmd.CommandText = sqlText;
cmd.Connection = conn;
if (parms != null && parms.Count > 0)
{
cmd.Parameters.AddRange(parms.ToArray());
}
OracleDataAdapter oda = new OracleDataAdapter(cmd);
DataSet dataSet = new DataSet();
oda.Fill(dataSet);
dataTable = dataSet.Tables[0];
}
catch (Exception ex)
{
log.Error(sqlText);
log.Error(ex.Message);
throw ex;
}
finally
{
conn.Close();
}
class Conn
{
private static string cn = "Data Source=127.0.0.1;Initial Catalog=Db2013;User ID=sa;pwd=123456;MultipleActiveResultSets=True";
public static SqlConnection rs = new SqlConnection(cn);
}
请各位指导。谢谢。 if (Hang1.Length != 0)//Dgv第一行,有人在线
{
try
{
using(var conn = CreateNewConnection())
{
conn.Open();
Int32 result = 0;
string sql = string.Format("Update Abiao Set Code='" + ZU1_h1 + "' Where ID=1");
SqlCommand cmd = new SqlCommand(sql, conn);
result = cmd.ExecuteNonQuery();
if (result < 1)
{
new SqlCommand("Update Bbiao Set Code='' Where BLie='" + ZU1_h1 + "'", conn).ExecuteNonQuery();
}
else
{
new SqlCommand("Insert Into Cbiao (Code)values('" + ZU1_h1 + "')", conn).ExecuteNonQuery();
}
}
}
catch (Exception ex)
{
//...
}
}
需要在局部中临时创建数据库连接,然后访问完,尽快释放(在using结束会自动释放)。
其它地方也是一样。不是搞什么“共享DbConnection”,那种以为“只要创建一次数据库逻辑连接然后就能到处访问”的做法就会造成你这一堆BUG。 List<MyObj> result;
using (var conn = new OracleConnection(cnStr))
{
conn.Open();
var comm = conn.CreateCommand();
comm.CommandText = "select e.TheName, e.Number from Users as e where ..........";
comm.CommandType = System.Data.CommandType.Text;
result = ( from DbDataRecord record in comm.ExecuteReader() select new MyObj{
Name = (string)record["TheName"],
Value = (double)record["Number"]
};
).ToList();
}
这样来返回 List<T> 对象集合,保证及时关闭 conn,同时也绝不向外界抛出 DataReader。