我正在撰寫一個客戶端-服務器應用程式并使用 SQL Server 資料庫。有時我需要插入有關新監護人的資訊,但出了點問題。
這是這段代碼:
sqlQuery = $"INSERT INTO [dbo].[Guardians] ([Login], [Password], [AdminAccess]) VALUES (N'{newLogin}', N'{newPassword}', {newAdminAccess})";
cmd = new SqlCommand(sqlQuery, sqlConnection);
if (cmd.ExecuteNonQuery() == 1)
{
listener.Send(Encoding.UTF8.GetBytes("Success"));
}
else
{
listener.Send(Encoding.UTF8.GetBytes("Failure"));
}
這是我的資料庫結構:
資料庫影像。
我無法理解這兩天的錯誤在哪里,或者類似的東西。請幫幫我。
uj5u.com熱心網友回復:
雖然這似乎沒有解決問題,但它確實解決了兩個主要的安全問題和一個次要的拒絕服務問題,并且根據我使用引數化查詢來解決 SQL 注入問題的經驗,也往往有助于解決這些語法錯誤。換句話說,做對了,你一開始就不會遇到這個問題。
sqlQuery = "INSERT INTO [dbo].[Guardians] ([Login], [Password], [AdminAccess]) VALUES (@Login, @Hash, @Admin)";
//It really is better to create a new connection for most queries. Don't try to re-use it throughout an app. Only re-use the connection string.
using var conn = new SqlConnection("connection string here");
using var cmd = new SqlCommand(sqlQuery, conn);
// Use actual parameter types and lengths here
cmd.Parameters.Add("@Login", SqlDbType.VarChar, 50).Value = newLogin;
cmd.Parameters.Add("@Hash", SqlDbType.Char, 60).Value = BCrypt.HashPassword(newPassword); // a bcrypt hash is ALWAYS EXACTLY 60 chars
cmd.Parameters.Add("@Admin", SqlDbType.Boolean).Value = newAdminAccess;
conn.Open();
if (cmd.ExecuteNonQuery() == 1)
{
listener.Send(Encoding.UTF8.GetBytes("Success"));
}
else
{
listener.Send(Encoding.UTF8.GetBytes("Shit"));
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/517360.html
標籤:C#sql服务器
上一篇:SQL按月份ID創建列標題
下一篇:查找兩列的每個組合的MAX值
