刚刚在sql managment Studio中使用数据库完成了我的Winforms Clinics程序。我的连接是ADO.NET实体数据模型,我的意思是edmx。我想问你们下一步是什么,问您是否有注射问题以及我应该如何防止注射。我所有的代码都是Linq,我对Linq充满信心,因此注射问题更少。我的问题是三个问题:
1]在实际服务器上部署alaive之前,必须在Visual项目的设置中进行哪些更改。我的winforms项目的属性是否有任何更改?因为现在这将是生产项目。
2)我的第二个问题是,当我添加一个新人员或搜索一个人员时,您是否看到我的代码中缺乏安全性?为了安全起见,我该怎么办?请在下面查看我的一些代码
3)(ADO.NET实体数据模型,ADO.NET实体数据模型)是否适用于此类大型系统?因为我的连接字符串在App.config中,所以它是一个很长的字符串,如下所示,这让我有点害怕。.;)
<add name="ClinicEntities" connectionString="metadata=res://*/MyHealthModel.csdl|res://*/MyHealthModel.ssdl|res://*/MyHealthModel.msl;provider=System.Data.SqlClient;provider connection string="data source=MyComputerName;initial catalog=ClinicDb;user id=***;password=*****;MultipleActiveResultSets=True;App=EntityFramework"" providerName="System.Data.EntityClient" /></connectionStrings>
以下是我的一些代码:搜索人时:
private void SearchPatient()
{
try
{
using (ClinicEntities db = new ClinicEntities())
{
if(txtIdCardnr.Text != string.Empty)
{
string IdCard = txtIdCardnr.Text.Trim();
var patId = db.Patient.Where(x => x.IdentityCardNr == IdCard).FirstOrDefault();
if(patId != null)
{
var reservation = (from u in db.Registration
join p in db.Patient on u.PatientId equals p.PatientId
join ....... you got the idea
where ......
select new
{
ReservationNr = u.ReservNr,
ReservationDate = u.ReservationDate,
........
}
).ToList();
dgvReservations.DataSource = reservation;
}
}
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
Exception inner = ex.InnerException;
while (inner != null)
{
MessageBox.Show(inner.Message);
inner = inner.InnerException;
}
}
}
并添加新的保留:
private async void AddReservation()
{
try
{
using (ClinicEntities db = new ClinicEntities())
{
if (IsValidated())
{
Reservation pat = new Reservation();
pat.SymptomId = Convert.ToInt32(cmbSymptom.SelectedValue);
pat.SymptonDate = Convert.ToDateTime(dateTimePicker1.Value.Date);
pat.SymptonTime = txtTime.Text.Trim();
pat.Notes = txtNoteEmg.Text.Trim();
pat.RegisterdBy = StaffId;
pat.PatientId = PatientId;
db.Reservation.Add(pat);
await db.SaveChangesAsync();
}
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
Exception inner = ex.InnerException;
while (inner != null)
{
MessageBox.Show(inner.Message);
inner = inner.InnerException;
}
}
}
所以,你们看到我的代码中缺乏安全性吗?再次感谢您帮助我回答所有三个问题。
不是StackOverflow进行代码审查的地方(但是有一个用于代码审查的堆栈交换站点,并且您的问题可能是在这里的话题)
1)我不太确定服务器如何进入这个方程式;当然,它像其他文件一样仅提供此winforms应用程序进行下载。无需更改
2)我在配置文件中看到未加密的纯文本密码,但是是否在乎是另一回事。即使用户确实使用发现的密码打开了本地数据库,并且四处看看,他们也无法造成任何实际损失。现在,如果该密码与您的生产服务器相同,则可能是更多问题了……您编写的用于进行数据库访问的LINQ不受SQL注入的影响。使其承担责任的唯一方法是执行将用户提供的值串联在一起的原始sql命令
3)我不确定StackOverflow是长连接字符串恐惧症寻求帮助的地方。有用;别理它(可能不加密密码)