C# 理解类和属性有困难
虽然我知道这是一个简单的问题,也是我知识上的一个空白,但请记住,我写这段代码是为了学习(详细的解释或最佳实践建议在这方面会有很大帮助) 首先,这是我的课:C# 理解类和属性有困难,c#,.net,class,C#,.net,Class,虽然我知道这是一个简单的问题,也是我知识上的一个空白,但请记住,我写这段代码是为了学习(详细的解释或最佳实践建议在这方面会有很大帮助) 首先,这是我的课: namespace CCQ.Crawler._2010 { public class MSSQL { public MSSQL(string connectionString) { ConnectionString = connectionString;
namespace CCQ.Crawler._2010
{
public class MSSQL
{
public MSSQL(string connectionString)
{
ConnectionString = connectionString;
}
public static string ConnectionString { get; private set; }
/// <summary>
/// Class to house statements that insert or update data into the database
/// </summary>
public class Upserts
{
/// <summary>
/// Add or update a new entry on the site collection table
/// </summary>
/// <param name="siteCollectionName"></param>
public void SiteCollection(string siteCollectionName)
{
const string queryString =
@"INSERT INTO [dbo].[SiteCollections]
([SnapShotDate]
,[SiteCollectionName]
,[SiteWebCount]
,[ContentDatabase]
,[SiteWebApplication])
VALUES
(@snapShotDate, @siteCollectionName, @siteWebCount, @contentDatabase, @siteWebApplication)";
using (var connection = new SqlConnection(ConnectionString))
{
using (var cmd = new SqlCommand(queryString, connection))
{
connection.Open();
cmd.Parameters.AddWithValue("snapShotDate", DateTime.Today.Date);
cmd.Parameters.AddWithValue("siteCollectionName", siteCollectionName);
cmd.ExecuteNonQuery();
}
}
}
}
}
}
现在我想我能用这门课做的是:
var query = new MSSQL(ConnectionString).Upserts;
query.SiteCollection("testing");
但是,那不行。当我试图声明该类时,遇到的错误是:
类名此时无效
我知道我的知识/课程结构中存在着巨大的差距,这就是原因,但我不太知道从哪里开始——我的思维中的错误在哪里?在这行代码中:
var query = new MSSQL(ConnectionString).Upserts;
实际上,您正在构造MSSQL类的一个新实例,然后使用语法,就好像Upserts
是您试图访问的属性一样
相反,要实例化嵌套类,您应该执行以下操作:
var mssql = new MSSQL("your connection string");
var query = new MSSQL.Upserts();
但是…
在封闭类的静态属性中存储连接字符串的方式有点奇怪,在非静态构造函数中初始化静态属性也有点奇怪
您可能不需要将Upserts
作为嵌套类。试着把它变成一种方法
此外,您的连接字符串可以存储在实例字段/属性中,而不是静态的。在这行代码中:
var query = new MSSQL(ConnectionString).Upserts;
实际上,您正在构造MSSQL类的一个新实例,然后使用语法,就好像Upserts
是您试图访问的属性一样
相反,要实例化嵌套类,您应该执行以下操作:
var mssql = new MSSQL("your connection string");
var query = new MSSQL.Upserts();
但是…
在封闭类的静态属性中存储连接字符串的方式有点奇怪,在非静态构造函数中初始化静态属性也有点奇怪
您可能不需要将Upserts
作为嵌套类。试着把它变成一种方法
此外,您的连接字符串可以存储在实例字段/属性中,而不是静态的。'query'属于MSSQL类型。SiteCollection属性属于Upserts类型。尽管已将MSSQL中的Upserts类型定义为嵌套类型,但实际上并没有在MSSQL对象中使用Upserts类型(例如,作为属性) 我能看到的最快的方法是将Upserts属性添加到MSSQL类中,并在构造函数中实例化它
public Upserts Upserts { get; private set; }
然后,您将能够通过以下方式访问该方法:
query.Upserts.SiteCollection("...");
或者,您可以修改Upserts以接收连接字符串并直接实例化它。。。不过,这是朝着从等式中删除MSSQL迈出的一步
我知道你写这篇文章的目的是想了解类和属性,所以我不会评论这是否是一种很好的DAL方法。'query'属于MSSQL类型。SiteCollection属性属于Upserts类型。尽管已将MSSQL中的Upserts类型定义为嵌套类型,但实际上并没有在MSSQL对象中使用Upserts类型(例如,作为属性) 我能看到的最快的方法是将Upserts属性添加到MSSQL类中,并在构造函数中实例化它
public Upserts Upserts { get; private set; }
然后,您将能够通过以下方式访问该方法:
query.Upserts.SiteCollection("...");
或者,您可以修改Upserts以接收连接字符串并直接实例化它。。。不过,这是朝着从等式中删除MSSQL迈出的一步
我知道你写这篇文章的目的是想了解类和属性,所以我不会评论这是否是一种很好的DAL方法。我认为在这种情况下没有必要使用嵌套类。你可以试试这个:
/// <summary>
/// <para>MSSQL class</para>
/// </summary>
public class MSSQL
{
#region Class field declaration
private string f_connectionString;
#endregion
#region Public method
/// <summary>
/// <para>Static method for getting the class instance.</para>
/// </summary>
/// <param name="p_connectionString">MSSQL connection string</param>
/// <returns><see cref="MSSQL"/></returns>
public static MSSQL Create(string p_connectionString)
{
return new MSSQL(p_connectionString);
}
public void SiteCollection(string p_siteCollectionName)
{
//Your Logic here.
}
#endregion
#region Constructor
/// <summary>
/// <para>Hide the default constructor</para>
/// </summary>
private MSSQL()
{
}
/// <summary>
/// <para>Private constructor for Static method</para>
/// </summary>
/// <param name="p_connectionString">MSSQL connection string</param>
private MSSQL(string p_connectionString)
{
this.f_connectionString = p_connectionString;
}
#endregion
}
通过以下方式获取网站集:
var siteCollection = instance.SiteCollection("Testing");
我认为在这种情况下没有必要使用嵌套类。你可以试试这个:
/// <summary>
/// <para>MSSQL class</para>
/// </summary>
public class MSSQL
{
#region Class field declaration
private string f_connectionString;
#endregion
#region Public method
/// <summary>
/// <para>Static method for getting the class instance.</para>
/// </summary>
/// <param name="p_connectionString">MSSQL connection string</param>
/// <returns><see cref="MSSQL"/></returns>
public static MSSQL Create(string p_connectionString)
{
return new MSSQL(p_connectionString);
}
public void SiteCollection(string p_siteCollectionName)
{
//Your Logic here.
}
#endregion
#region Constructor
/// <summary>
/// <para>Hide the default constructor</para>
/// </summary>
private MSSQL()
{
}
/// <summary>
/// <para>Private constructor for Static method</para>
/// </summary>
/// <param name="p_connectionString">MSSQL connection string</param>
private MSSQL(string p_connectionString)
{
this.f_connectionString = p_connectionString;
}
#endregion
}
通过以下方式获取网站集:
var siteCollection = instance.SiteCollection("Testing");
那么我的连接字符串呢?按照您编写它的方式,首先需要构造
MSSQL
的实例来初始化静态ConnectionString
属性,但这不是最好的方法。有关更多信息,请参见我的编辑。Hmmm。谢谢,更多地了解它-感谢您的指导!那么我的连接字符串呢?按照您编写它的方式,首先需要构造MSSQL
的实例来初始化静态ConnectionString
属性,但这不是最好的方法。有关更多信息,请参见我的编辑。Hmmm。谢谢,更多地了解它-感谢您的指导!你可以在网上找到很多关于这个主题的指导。虽然有点过时,但本文将为您提供一个开始:。请记住,目前大多数情况下,开发人员会选择使用诸如NHibernate或EntityFramework之类的ORM,而不是从头开始使用他们自己的DAL。你可以在web上找到关于这个主题的很多指导。虽然有点过时,但本文将为您提供一个开始:。请记住,目前大多数情况下,开发人员会选择使用诸如NHibernate或EntityFramework之类的ORM,而不是从头开始使用自己的DAL。