使用asp.net调用存储过程

oni*_*nit 9 sql-server asp.net stored-procedures connection-string web-config

如果我在web.config文件中定义了连接字符串,如何从C#代码创建与SQL db的连接(抱歉忘记指定),然后调用存储过程.然后我想最终以某种方式使用这些数据作为GridView的DataSource.

以下是在web.config中定义连接字符串的方法:

<connectionStrings>
 <add name="db.Name" connectionString="Data Source=db;Initial Catalog=dbCat;User ID=userId;Password=userPass;" providerName="System.Data.SqlClient" />
 </connectionStrings>
Run Code Online (Sandbox Code Playgroud)

数据库服务器是Microsoft SQL服务器.

这是我在寻找的东西:

ConnectionStringSettings conSet = ConfigurationManager.ConnectionStrings["db.Name"];
SqlConnection con = new SqlConnection(conSet.ConnectionString);
Run Code Online (Sandbox Code Playgroud)

获取数据的代码相当简单.我更感兴趣的是从web.config文件中的connectionString变量访问它.

Jon*_*onH 7

如果是这样的资源文件:

private static readonly string connString = Resource1.connString;

其中connString是密钥的名称.如果是web.config文件

像这样的东西:

private static readonly string connString = System.Configuration.ConfigurationManager.AppSettings["strConn"]; 其中conn在您的Web配置文件中定义.

<add key="strConn" value="User ID=test;Password=test;Initial Catalog=TestDB;Data Source=NameOfServer;"/>
Run Code Online (Sandbox Code Playgroud)

然后调用sproc:

  //connString = the string of our database app found in the resource file
                using (SqlConnection con = new SqlConnection(connString))
                {
                    using (SqlCommand cmd = new SqlCommand("EMPDLL_selClientByClientID", con))
                    {
                        cmd.CommandType = CommandType.StoredProcedure;
                        cmd.Parameters.Add("@ClientID", SqlDbType.VarChar).Value = cID;
                        con.Open();

                        using (SqlDataReader reader = cmd.ExecuteReader())
                        {
                            if (reader.HasRows)
                            {
                                if (reader.Read())
                                {
                                       //more code
                                }
                             }
                        }
                     }
                  }
Run Code Online (Sandbox Code Playgroud)

那就是如果你在C#中编码,VB.net它的同一个交易只是更加冗长:),这是一个小样本:

 Public Sub DeleteEmployee(ByVal lVID As Long)
        Dim conMyData As SqlConnection
        Dim cmdDelete As SqlCommand

        Try
            conMyData = New SqlConnection(connString)
            cmdDelete = New SqlCommand("delEmployee", conMyData)

            With cmdDelete
                .CommandType = CommandType.StoredProcedure
                'add the parameters
                .Parameters.Add("@LoginID", SqlDbType.BigInt).Value = lVID    'the request
                conMyData.Open()    'open a connection
                .ExecuteNonQuery()  'execute it
            End With

        Catch ex As Exception
            Throw ex
        Finally
            cmdDelete = Nothing
            conMyData.Close()
            conMyData = Nothing
        End Try
    End Sub
Run Code Online (Sandbox Code Playgroud)

当然,您应该使用using语句而不是try/catch/finally确保清理正在使用的资源.


fea*_*net 5

像这样的东西...

using (var con = new SqlConnection(_connectionString))
{
    using (var cmd = new SqlCommand(_storedProcedureName, con))
    {
        cmd.CommandType = CommandType.StoredProcedure;
        cmd.Parameters.AddWithValue("@pMyParamater", myParamaterValue);
        con.Open();

        using (var reader = cmd.ExecuteReader())
        {
            while (reader.Read())
            {
                 // do something with the row
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

老实说,这都是非常简单的东西,您应该能够从ADO.NET 文档中找到所需的一切

  • @onit 是的,我意识到,这并不是批评。如果您是新手,最好养成阅读文档的习惯作为第一点。如果你仍然被卡住,然后问一个关于 SO 的更具体的问题。您将通过这种方式了解更多信息,并且您将避免本网站有时提供的一些不好的建议。 (3认同)