我建立了一个连接读取数据库的webservice,其中有两个方法[WebMethod],一个用于存数据,一个用于取数据,在实现过程中,有如下问题请教:
1.建立SqlConnection 和SqlCommand时,在public class Service1里面建立好些还是在[WebMethod]是建立好些呢?
2.遇到多个用户同时调用方法[WebMethod]时,会不会产生冲突?
2.调用了方法[WebMethod]后,是否需要立即关闭SqlConnection 和SqlCommand?在public class Service1里面关闭好些还是在[WebMethod]是关闭好些呢?
1.建立SqlConnection 和SqlCommand时,在public class Service1里面建立好些还是在[WebMethod]是建立好些呢?
2.遇到多个用户同时调用方法[WebMethod]时,会不会产生冲突?
2.调用了方法[WebMethod]后,是否需要立即关闭SqlConnection 和SqlCommand?在public class Service1里面关闭好些还是在[WebMethod]是关闭好些呢?
public 的则只有一个连接.这个连接要在数据库服务器上看.
自己写一个 SqlHelper 吧
用完Conn后,需关闭
SqlConnection mysqlconnection = new SqlConnection(@"Server=**;Database=**;UID=**;PWD=**");
为什么下面这句就会出错呢?
mysqlconnection.Open();
1.如果在public里关闭的话,会不会每访问一次就关闭了呢?
2.如果在public是建立的话:
SqlConnection mysqlconnection = new SqlConnection(@"Server=**;Database=**;UID=**;PWD=**");
为什么下面这句就会出错呢?
mysqlconnection.Open();
Dim conn As OracleConnection = New OracleConnection(ConnStr)
Try
conn.Open()
Dim da As OracleDataAdapter = New OracleDataAdapter(strSql, conn)
Dim ds As DataSet = New DataSet
da.Fill(ds)
Return ds
Finally
conn.Close()
conn.Dispose()
End Try
End Function
Public Shared Sub InsUpDel(ByVal strSql As String)
Dim conn As OracleConnection = New OracleConnection(ConnStr)
Try
conn.Open()
Dim cmd As OracleCommand = New OracleCommand(strSql, conn)
cmd.ExecuteNonQuery()
Finally
conn.Close()
conn.Dispose()
End Try
End Sub
Public Shared Function InsUpDelTransaction(ByVal List As ArrayList) As String
Dim i As Integer
Vari.TransFlag = 0
Dim conn As OracleConnection = New OracleConnection(ConnStr)
conn.Open()
Dim myTrans As OracleTransaction
myTrans = conn.BeginTransaction(IsolationLevel.ReadCommitted)
Dim cmd As OracleCommand = conn.CreateCommand()
cmd.Transaction = myTrans
Try
For i = 0 To List.Count - 1
cmd.CommandText = List(i).ToString()
cmd.ExecuteNonQuery()
Next
myTrans.Commit()
Return ""
Catch ex As Exception
Vari.TransFlag = 1
myTrans.Rollback()
Return ex.Message.ToString()
Finally
conn.Close()
End Try
End Function
这句话可以拿出去,程序一开始调用一次就可以了!mysqlconnection.Open(); 报什么错?
我想发表下个人意见,"其实是放回连接池"应该是"其实是把一个连接放回连接池"
有没有想过执行事务的可能.如果把连接定义在public class service1里的话,是没问题的,如果创建连接也在public class service1里的话,那就有问题了.那不就是多个用户都使用的是同一个数据库连接吗?
如果两个用户同时执行一个带事务处理的WebMethod的话,我觉得会导致事务混乱的.
哪会有人在 WebService 里面实现数据库连接的????
自己写一个 SqlHelper 吧
用完Conn后,需关闭
我觉得这个说的还是有道理的.
或者楼主就将sqlconnection和sqlcommond的创建和销毁都放在webmethod里把.
用如下形式:
using (SqlConnection connection = new SqlConnection(connectionString))
{
using (SqlCommand cmd = new SqlCommand(SQLString, connection))
{
try
{
connection.Open();
int rows = cmd.ExecuteNonQuery();
return rows;
}
catch (System.Data.SqlClient.SqlException e)
{
connection.Close();
throw e;
}
}
}