我建立了一个连接读取数据库的webservice,其中有两个方法[WebMethod],一个用于存数据,一个用于取数据,在实现过程中,有如下问题请教:
1.建立SqlConnection 和SqlCommand时,在public class Service1里面建立好些还是在[WebMethod]是建立好些呢?
2.遇到多个用户同时调用方法[WebMethod]时,会不会产生冲突?
2.调用了方法[WebMethod]后,是否需要立即关闭SqlConnection 和SqlCommand?在public class Service1里面关闭好些还是在[WebMethod]是关闭好些呢?

解决方案 »

  1.   

    public 就可,在公用类里面关闭就可,其实是放回连接池.
      

  2.   

    如果是私有的连接,则如果访问的人多了,会向数据库请求许多连接.
    public 的则只有一个连接.这个连接要在数据库服务器上看.
      

  3.   

     哪会有人在 WebService 里面实现数据库连接的????
        自己写一个 SqlHelper 吧 
      用完Conn后,需关闭
      

  4.   

    如果在public里关闭的话,会不会每访问一次就关闭了呢?
      

  5.   

    如果在public是建立的话:
    SqlConnection mysqlconnection = new SqlConnection(@"Server=**;Database=**;UID=**;PWD=**");
    为什么下面这句就会出错呢?
    mysqlconnection.Open();
      

  6.   

    青鸟同学,下面的问题还没有解决呢:
    1.如果在public里关闭的话,会不会每访问一次就关闭了呢?
    2.如果在public是建立的话: 
    SqlConnection mysqlconnection = new SqlConnection(@"Server=**;Database=**;UID=**;PWD=**"); 
    为什么下面这句就会出错呢? 
    mysqlconnection.Open();
      

  7.   

     Public Function SelData(ByVal strSql As String) As DataSet
            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
      

  8.   

    Dim conn As OracleConnection = New OracleConnection(ConnStr)
    这句话可以拿出去,程序一开始调用一次就可以了!mysqlconnection.Open(); 报什么错?
      

  9.   


    我想发表下个人意见,"其实是放回连接池"应该是"其实是把一个连接放回连接池"
    有没有想过执行事务的可能.如果把连接定义在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;
                        }
                    }
                }