C#重用我的接口访问数据库
我对c#比较陌生,只是做了几年的开发人员。我遵循了这个非常棒的教程,学习了如何创建一个包含数据模型和接口的库,以处理检索数据和将数据插入数据库的操作。我正在开发Blazor服务器端应用程序。我利用我的数据访问库,通过startup.cs中创建的服务将其接口注入razor页面。所有这些都非常有效 但是,现在我正在创建一个类,该类读取分隔文件并将数据插入数据库表。我希望在我的数据访问库中使用与将razor页面连接到后端相同的接口 这里是我的类,我想使用IpermitData中的InsertPermit方法将一条记录插入到我的数据库表中,但_db为null,当我运行它时会给我一个null引用异常。如何获取此接口的句柄,以便使用它插入数据C#重用我的接口访问数据库,c#,blazor,C#,Blazor,我对c#比较陌生,只是做了几年的开发人员。我遵循了这个非常棒的教程,学习了如何创建一个包含数据模型和接口的库,以处理检索数据和将数据插入数据库的操作。我正在开发Blazor服务器端应用程序。我利用我的数据访问库,通过startup.cs中创建的服务将其接口注入razor页面。所有这些都非常有效 但是,现在我正在创建一个类,该类读取分隔文件并将数据插入数据库表。我希望在我的数据访问库中使用与将razor页面连接到后端相同的接口 这里是我的类,我想使用IpermitData中的InsertPermi
{
public class TextFileParser
{
public TextFileParser()
{
}
public void InsertTextFileData(string filePath)
{
string errMessage = string.Empty;
FileInfo file = new FileInfo(filePath);
if (!File.Exists(file.FullName))
{
errMessage = "File not found!";
}
else if (file.Length >= 0)
{
errMessage = "File has no data!";
}
IPermitData _db;
PermitModel permitRecord = new PermitModel();
string vText = string.Empty;
string[] vString;
string delimiter = "\t";
StreamReader fileReader = new StreamReader(filePath);
List<PermitModel> dt = new List<PermitModel>();
//dt.Add("Parcel Number");
//dt.Columns.Add("Permit ID");
//dt.Columns.Add("Construction Loc");
//dt.Columns.Add("Submission Date");
//dt.Columns.Add("Issue Date");
//dt.Columns.Add("Permit Type");
//dt.Columns.Add("Const. Addr.");
//dt.Columns.Add("EST Cost");
//dt.Columns.Add("Referrer");
//dt.Columns.Add("Comments");
//dt.Columns.Add("Status");
int header = 1;
while (!fileReader.EndOfStream)
{
if (header == 1)
{
header += 1;
vText = fileReader.ReadLine();
vString = vText.Split(delimiter, StringSplitOptions.None);
continue;
}
vText = fileReader.ReadLine();
vString = vText.Split(delimiter, StringSplitOptions.None);
permitRecord.PD_ParcelID = vString[0];
permitRecord.PD_Situs1 = vString[1];
permitRecord.PD_Owner = vString[2];
permitRecord.PD_Addr1 = vString[3];
permitRecord.PD_Addr2 = vString[4];
permitRecord.ADDR_3 = vString[5];
permitRecord.PD_City = vString[6];
permitRecord.PD_State = vString[7];
permitRecord.PD_Zip = vString[8];
permitRecord.Type_Construction = vString[9];
permitRecord.Estimated_Cost = vString[10];
permitRecord.Permit_Issue_Date = vString[11];
permitRecord.Permit_Type = vString[12];
permitRecord.Property_Type = vString[13];
permitRecord.Permit_NO = vString[14];
permitRecord.Completion_Date = vString[15];
permitRecord.Percent_Complete = vString[16];
permitRecord.Modified_Date = vString[17];
permitRecord.Note = vString[18];
permitRecord.Note_Date = vString[19];
permitRecord.Submission_Date = vString[20];
permitRecord.Submitter = vString[21];
permitRecord.Submitter_Phone = vString[22];
permitRecord.Submitter_Email = vString[23];
permitRecord.Land_AV = vString[24];
permitRecord.Impr_AV = vString[25];
permitRecord.Sec_Location = vString[26];
try
{
_db.InsertPermit(permitRecord);
}
catch (Exception)
{
// dt.Add(vString[0], vString[14], vString[1], vString[20], vString[11], vString[12], vString[26], vString[10], vString[21], vString[18], "Failed " + ex.Message);
//dt.Add(permitRecord);
continue;
}
//dt.Rows.Add(vString[0], vString[14], vString[1], vString[20], vString[11], vString[12], vString[26], vString[10], vString[21], vString[18], "Passed");
}
}
}
{
公共类TextFileParser
{
公共TextFileParser()
{
}
public void InsertTextFileData(字符串文件路径)
{
string errMessage=string.Empty;
FileInfo file=新的FileInfo(filePath);
如果(!File.Exists(File.FullName))
{
errMessage=“未找到文件!”;
}
else if(file.Length>=0)
{
errMessage=“文件没有数据!”;
}
IPermitData_db;
PermitModel permitRecord=新PermitModel();
string vText=string.Empty;
字符串[]vString;
字符串分隔符=“\t”;
StreamReader fileReader=新的StreamReader(文件路径);
List dt=新列表();
//dt.添加(“包裹编号”);
//dt.列。添加(“许可证ID”);
//dt.栏添加(“施工位置”);
//dt.栏添加(“提交日期”);
//dt.栏添加(“发布日期”);
//dt.列。添加(“许可类型”);
//添加(“常量添加”);
//dt.列加上(“预计成本”);
//dt.列。添加(“推荐人”);
//dt.列。添加(“注释”);
//dt.列。添加(“状态”);
int头=1;
而(!fileReader.EndOfStream)
{
如果(标题==1)
{
标题+=1;
vText=fileReader.ReadLine();
vString=vText.Split(分隔符,StringSplitOptions.None);
继续;
}
vText=fileReader.ReadLine();
vString=vText.Split(分隔符,StringSplitOptions.None);
permitRecord.PD_ParcelID=vString[0];
permitRecord.PD_Situs1=vString[1];
permitRecord.PD_Owner=vString[2];
permitRecord.PD_Addr1=vString[3];
permitRecord.PD_Addr2=vString[4];
permitRecord.ADDR_3=vString[5];
permitRecord.PD_City=vString[6];
permitRecord.PD_State=vString[7];
permitRecord.PD_Zip=vString[8];
permitRecord.Type_构造=vString[9];
permitRecord.Estimated_Cost=vString[10];
permitRecord.Permit_Issue_Date=vString[11];
permitRecord.Permit_Type=vString[12];
permitRecord.Property_Type=vString[13];
permitRecord.Permit_NO=vString[14];
permitRecord.Completion_Date=vString[15];
permitRecord.Percent_Complete=vString[16];
permitRecord.Modified_Date=vString[17];
permitRecord.Note=vString[18];
permitRecord.Note_Date=vString[19];
permitRecord.Submission_Date=vString[20];
permitRecord.Submitter=vString[21];
permitRecord.Submitter_Phone=vString[22];
permitRecord.Submitter_Email=vString[23];
permitRecord.Land_AV=vString[24];
permitRecord.Impr_AV=vString[25];
permitRecord.Sec_Location=vString[26];
尝试
{
_db.插入许可证(许可证记录);
}
捕获(例外)
{
//dt.Add(vString[0]、vString[14]、vString[1]、vString[20]、vString[11]、vString[12]、vString[26]、vString[10]、vString[21]、vString[18]、“失败”+ex.Message);
//dt.添加(许可记录);
继续;
}
//添加(vString[0]、vString[14]、vString[1]、vString[20]、vString[11]、vString[12]、vString[26]、vString[10]、vString[21]、vString[18]、“已通过”);
}
}
}
}
以下是我的dataaccesslibrary中的代码文件
public interface IPermitData
{
Task<List<PermitModel>> GetPermitData();
Task InsertPermit(PermitModel permit);
Task DeletePermit(PermitModel permit);
}
public class PermitData : IPermitData
{
private readonly ISqlDataAccess _db;
public PermitData(ISqlDataAccess db)
{
_db = db;
}
public Task<List<PermitModel>> GetPermitData()
{
string sql = "select * from dbo.I_Permit";
return _db.LoadData<PermitModel, dynamic>(sql, new { });
}
public Task InsertPermit(PermitModel permit)
{
string sql = @"insert into dbo.I_Permit ( Parcel, Location, Owner_Name, ADDR_1, ADDR_2, ADDR_3, City, State_Sh, Zipcode, Type_Construction, Estimated_Cost, Permit_Issue_Date, Permit_Type, Property_Type, Permit_NO, Completion_Date, Percent_Complete, Modified_Date, Note, Note_Date, Submission_Date, Submitter, Submitter_Phone, Submitter_Email, Land_AV, Impr_AV, Sec_Location, PD_Owner, PD_Name2, PD_Addr1, PD_Addr2, PD_City, PD_State, PD_Zip, PD_ControlNo, PD_ParcelID, PD_Situs1, PD_Situs2, PD_S_City, PD_S_State, PS_S_Zip )
values ( @Parcel, @Location, @Owner_Name, @ADDR_1, @ADDR_2, @ADDR_3, @City, @State_Sh, @Zipcode, @Type_Construction, @Estimated_Cost, @Permit_Issue_Date, @Permit_Type, @Property_Type, @Permit_NO, @Completion_Date, @Percent_Complete, @Modified_Date, @Note, @Note_Date, @Submission_Date, @Submitter, @Submitter_Phone, @Submitter_Email, @Land_AV, @Impr_AV, @Sec_Location, @PD_Owner, @PD_Name2, @PD_Addr1, @PD_Addr2, @PD_City, @PD_State, @PD_Zip, @PD_ControlNo, @PD_ParcelID, @PD_Situs1, @PD_Situs2, @PD_S_City, @PD_S_State, @PS_S_Zip )";
return _db.SaveData(sql, permit);
}
public Task DeletePermit(PermitModel permit)
{
string sql = @"DELETE FROM dbo.I_Permit WHERE Record_ID =' " + permit.Record_ID + " ';";
return _db.DeleteData(sql, permit);
}
}
public interface ISqlDataAccess
{
string ConnectionStringName { get; set; }
Task<List<T>> LoadData<T, U>(string sql, U parameters);
Task SaveData<T>(string sql, T parameters);
Task DeleteData<T>(string sql, T parameters);
}
public class SqlDataAccess : ISqlDataAccess
{
private readonly IConfiguration _config;
public string ConnectionStringName { get; set; } = "Default";
public SqlDataAccess(IConfiguration config)
{
_config = config;
}
public async Task<List<T>> LoadData<T, U>(string sql, U parameters)
{
string connectionString = _config.GetConnectionString(ConnectionStringName);
using (IDbConnection connection = new SqlConnection(connectionString))
{
var data = await connection.QueryAsync<T>(sql, parameters);
return data.ToList();
}
}
public async Task SaveData<T>(string sql, T parameters)
{
string connectionString = _config.GetConnectionString(ConnectionStringName);
using (IDbConnection connection = new SqlConnection(connectionString))
{
await connection.ExecuteAsync(sql, parameters);
}
}
public async Task DeleteData<T>(string sql, T parameters)
{
string connectionString = _config.GetConnectionString(ConnectionStringName);
using (IDbConnection connection = new SqlConnection(connectionString))
{
await connection.ExecuteAsync(sql, parameters);
}
}
}
公共接口IPermitData
{
任务GetPermitData();
任务插入许可证(许可证模型许可证);
任务删除许可证(许可证模型许可证);
}
公共类许可数据:IPermitData
{
私有只读ISqlDataAccess_db;
公共许可数据(ISqlDataAccess数据库)
{
_db=db;
}
公共任务GetPermitData()
{
string sql=“select*from dbo.I_Permit”;
返回_db.LoadData(sql,新{});
}
公共任务插入许可证(许可证模型许可证)
{
字符串sql=@“插入到dbo.I_许可证中(地块、位置、业主名称、地址1、地址2、地址3、城市、州、邮编、类型施工、估计成本、许可证签发日期、许可证类型、财产类型、许可证编号、竣工日期、完工百分比、修改日期、注释、注记日期、提交日期、提交人、提交人电话、提交人电子邮件、土地影音、改进影音、Sec位置、PD业主、PD N)ame2、PD_地址1、PD_地址2、PD_城市、PD_州、PD_邮编、PD_控制编号、PD_地块、PD_地点1、PD_地点2、PD_城市、PD_州、PS_邮编)
价值观(@packet、@Location、@Owner\u Name、@ADDR\u 1、@ADDR\u 2、@ADDR\u 3、@City、@State\u Sh、@Zipcode、@Type\u Construction、@promission\u-Issue\u-Date、@promission\u-Type、@Property\u-Type、@promission\u-NO、@Completion\u-Date、@Modified\u-Date、@Note\u-Date、@Note\u-Date、@Submitter\u-Date、@Submitter\u-mail、@Land\u-AV、@Submitter\u-e、@Land\u-AV欧共体