路径+DataRow+SqlPara防止sql注入

 

绝对路径:是从盘符开始的路径,形如
C:\windows\system32\cmd.exe
相对路径:是从当前路径开始的路径,假如当前路径为C:\windows
要描述上述路径,只需输入
system32\cmd.exe
实际上,严格的相对路径写法应为
.\system32\cmd.exe
其中,.表示当前路径,在通道情况下可以省略,只有在特殊的情况下不能省略。


Session 的用法是什么?
简单说就是保存用户信息的

给你打个比方吧,就比如你在百度这里问问题,当你首先登入的时候,你的名字等等就要写入到session;
session("name")=request.form("name")这样的话,当你从登入的首页转到它的子页,你的名字就还有效,你有没有看见上面”我的提问,我的回答等等”否则的话,也就是你不用session,当你登入首页,再转到子页,你就等于没登入,你又要重新登入啦.知道了吗,也就是说,session是用来记录你的进程信息的,
假如当前路径为c:\program files
要调用上述命令,则需要输入
..\windows\system32\cmd.exe
其中,..为父目录。
当前路径如果为c:\program files\common files
则需要输入
..\..\windows\system32\cmd.exe

另外,还有一种不包含盘符的特殊绝对路径,形如
\windows\system32\cmd.exe
无论当前路径是什么,会自动地从当前盘的根目录开始查找指定的程序。


../是上一层目录的意思 ,而~/是根目录的意思。
比如你建的项目是:A/B/C/Default.aspx在网页中使用../表示的就是B/,而~/表示的就是A/


在C盘下的WEB文件夹里有两个文件A.asp和B.asp~~
如果用A文件引用B文件里的内容~~那么在A.asp里的写法可以是
<!--#include file = "B.asp"-->
引号里面的就是B文件的名字,因为A和B都在同一个目录里~所以可以直接写文件名~~

那么如果B文件在A文件同目录下的一个image文件夹下呢~那么写法就是
<!--#include file = "image/B.asp"-->

以上说的就是相对路径(虚拟路径)~~

同样是A和B两个文件~~调用B文件也可以这样写:
<!--#include file = "C:\WEB\B.asp"-->
这就是绝对路径了~~
--------------------------------------------
SqlParameter 作用就是防止有特殊字符。一般情况下用于往存储过程传参

一般来说,在更新DataTable或是DataSet时,如果不采用SqlParameter,那么当输入的Sql语句出现歧义时,如字符串中含有单引号,程序就会发生错误,并且他人可以轻易地通过拼接Sql语句来进行注入攻击。
------------------------------------------------------------
SQL中 @一般用来表示自己定义的一个变量
------------------------------------------
DataRow 是用来表示一个数据表的的数据行,所以,它不能单独new,因为一行记录,需要有架构(架构就是描述这一行都有哪些列,分别是什么数据类型,甚至索引字段是哪个,有无约束等)。

所以DataRow有需要在有架构的情况下,才可以创建。

所以,你必须要先构造一个DataTable,然后才能在相应的DataTable上创建一行。

示例代码:
Columns 列
DataTable memTable = new DataTable( "tableName" );
memTable.Columns.Add( new DataColumn( "ID", typeof( int ) ) );
memTable.Columns.Add( new DataColumn( "Username", typeof( string ) );
memTable.Columns.Add( new DataColumn( "Password", typeof( Guid ) );

DataRow row = memTable.NewRow();
row[ "ID" ] = 1;
row[ "Username" ] = "badbug";
row[ "Password" ] = Guid.NewGuid();

memTable.Rows.Add( row );

转载于:https://www.cnblogs.com/ZkbFighting/p/8143376.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
实现邮件的收发需要使用邮件协议,常用的有SMTP、POP3、IMAP协议,其中SMTP协议用于发送邮件,POP3和IMAP协议用于接收邮件。同时,为了存储邮件,需要使用数据库,可以使用 SQL Server。 以下是一个使用 C# Winform 和 SQL Server 实现邮件收发的简单示例: 首先,需要在 SQL Server 中创建两张表,一张用于存储邮件基本信息,如邮件主题、发件人、收件人等,另一张用于存储邮件内容。 邮件信息表(MailInfo): | 字段名 | 类型 | 描述 | | ------ | ------ | ------ | | Id | Int | 邮件ID | | Subject | Nvarchar(100) | 邮件主题 | | FromAddress | Nvarchar(100) | 发件人地址 | | ToAddress | Nvarchar(100) | 收件人地址 | | CcAddress | Nvarchar(100) | 抄送地址 | | BccAddress | Nvarchar(100) | 密送地址 | | SendTime | Datetime | 发送时间 | | Status | Int | 邮件状态(0:未发送,1:已发送,2:已删除) | 邮件内容表(MailContent): | 字段名 | 类型 | 描述 | | ------ | ------ | ------ | | Id | Int | 邮件ID | | Content | Nvarchar(MAX) | 邮件内容 | 然后,使用 C# Winform 编写前端界面,包括邮件编辑、发送、接收等功能。在邮件发送时,将邮件信息保存到 MailInfo 表中,同时将邮件内容保存到 MailContent 表中。在邮件接收时,从邮件服务器(如QQ邮箱、163邮箱等)获取邮件信息和内容,保存到对应的表中。 示例代码如下: ```csharp using System; using System.Data; using System.Data.SqlClient; using System.Net; using System.Net.Mail; using System.Windows.Forms; namespace MailDemo { public partial class MainForm : Form { private const string connectionString = "Data Source=.;Initial Catalog=MailDB;Integrated Security=True"; public MainForm() { InitializeComponent(); } private void btnSend_Click(object sender, EventArgs e) { // 获取发件人地址、密码、收件人地址、主题、内容 string fromAddress = txtFromAddress.Text.Trim(); string password = txtPassword.Text.Trim(); string toAddress = txtToAddress.Text.Trim(); string subject = txtSubject.Text.Trim(); string content = txtContent.Text.Trim(); // 创建邮件对象 MailMessage mailMessage = new MailMessage(); mailMessage.From = new MailAddress(fromAddress); mailMessage.To.Add(new MailAddress(toAddress)); mailMessage.Subject = subject; mailMessage.Body = content; // 发送邮件 SmtpClient smtpClient = new SmtpClient(); smtpClient.Host = "smtp." + fromAddress.Split('@')[1]; smtpClient.Port = 25; smtpClient.EnableSsl = true; smtpClient.Credentials = new NetworkCredential(fromAddress, password); smtpClient.Send(mailMessage); // 保存邮件信息到数据库 SaveMailInfo(fromAddress, toAddress, subject, content); MessageBox.Show("邮件发送成功!"); } private void btnReceive_Click(object sender, EventArgs e) { // 获取收件人地址、密码 string toAddress = txtToAddress.Text.Trim(); string password = txtPassword.Text.Trim(); // 接收邮件 Pop3Client pop3Client = new Pop3Client(); pop3Client.Connect("pop." + toAddress.Split('@')[1], 995, true); pop3Client.Authenticate(toAddress, password); DataTable mailDataTable = new DataTable(); mailDataTable.Columns.Add("FromAddress", typeof(string)); mailDataTable.Columns.Add("ToAddress", typeof(string)); mailDataTable.Columns.Add("Subject", typeof(string)); mailDataTable.Columns.Add("Content", typeof(string)); mailDataTable.Columns.Add("SendTime", typeof(DateTime)); for (int i = 1; i <= pop3Client.GetMessageCount(); i++) { Message message = pop3Client.GetMessage(i); DataRow mailDataRow = mailDataTable.NewRow(); mailDataRow["FromAddress"] = message.Headers.From.Address; mailDataRow["ToAddress"] = message.Headers.To[0].Address; mailDataRow["Subject"] = message.Headers.Subject; mailDataRow["Content"] = message.MessagePart.BodyEncoding.GetString(message.MessagePart.Body); mailDataRow["SendTime"] = message.Headers.DateSent; mailDataTable.Rows.Add(mailDataRow); } // 保存邮件信息到数据库 SaveMailInfo(mailDataTable); dgvMail.DataSource = mailDataTable; } private void SaveMailInfo(string fromAddress, string toAddress, string subject, string content) { using (SqlConnection connection = new SqlConnection(connectionString)) { connection.Open(); // 保存邮件信息到 MailInfo 表 string mailInfoSql = "INSERT INTO MailInfo (Subject, FromAddress, ToAddress, SendTime, Status) VALUES (@Subject, @FromAddress, @ToAddress, @SendTime, @Status)"; SqlCommand mailInfoCommand = new SqlCommand(mailInfoSql, connection); mailInfoCommand.Parameters.AddWithValue("@Subject", subject); mailInfoCommand.Parameters.AddWithValue("@FromAddress", fromAddress); mailInfoCommand.Parameters.AddWithValue("@ToAddress", toAddress); mailInfoCommand.Parameters.AddWithValue("@SendTime", DateTime.Now); mailInfoCommand.Parameters.AddWithValue("@Status", 1); mailInfoCommand.ExecuteNonQuery(); // 获取邮件ID string getMailIdSql = "SELECT @@IDENTITY"; SqlCommand getMailIdCommand = new SqlCommand(getMailIdSql, connection); int mailId = Convert.ToInt32(getMailIdCommand.ExecuteScalar()); // 保存邮件内容到 MailContent 表 string mailContentSql = "INSERT INTO MailContent (Id, Content) VALUES (@Id, @Content)"; SqlCommand mailContentCommand = new SqlCommand(mailContentSql, connection); mailContentCommand.Parameters.AddWithValue("@Id", mailId); mailContentCommand.Parameters.AddWithValue("@Content", content); mailContentCommand.ExecuteNonQuery(); } } private void SaveMailInfo(DataTable mailDataTable) { using (SqlConnection connection = new SqlConnection(connectionString)) { connection.Open(); foreach (DataRow mailDataRow in mailDataTable.Rows) { // 保存邮件信息到 MailInfo 表 string mailInfoSql = "INSERT INTO MailInfo (Subject, FromAddress, ToAddress, SendTime, Status) VALUES (@Subject, @FromAddress, @ToAddress, @SendTime, @Status)"; SqlCommand mailInfoCommand = new SqlCommand(mailInfoSql, connection); mailInfoCommand.Parameters.AddWithValue("@Subject", mailDataRow["Subject"].ToString()); mailInfoCommand.Parameters.AddWithValue("@FromAddress", mailDataRow["FromAddress"].ToString()); mailInfoCommand.Parameters.AddWithValue("@ToAddress", mailDataRow["ToAddress"].ToString()); mailInfoCommand.Parameters.AddWithValue("@SendTime", mailDataRow["SendTime"]); mailInfoCommand.Parameters.AddWithValue("@Status", 1); mailInfoCommand.ExecuteNonQuery(); // 获取邮件ID string getMailIdSql = "SELECT @@IDENTITY"; SqlCommand getMailIdCommand = new SqlCommand(getMailIdSql, connection); int mailId = Convert.ToInt32(getMailIdCommand.ExecuteScalar()); // 保存邮件内容到 MailContent 表 string mailContentSql = "INSERT INTO MailContent (Id, Content) VALUES (@Id, @Content)"; SqlCommand mailContentCommand = new SqlCommand(mailContentSql, connection); mailContentCommand.Parameters.AddWithValue("@Id", mailId); mailContentCommand.Parameters.AddWithValue("@Content", mailDataRow["Content"].ToString()); mailContentCommand.ExecuteNonQuery(); } } } } } ``` 需要注意的是,为了保护数据的安全性,需要对数据库连接字符串和密码等敏感信息进行加密处理。另外,由于邮件的发送和接收需要联网操作,因此需要确保网络畅通。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值