gpt4 book ai didi

c# - C# 中的 SQL - 为什么这么冗长?

转载 作者:行者123 更新时间:2023-11-30 13:28:11 25 4
gpt4 key购买 nike

我在 PHP 中使用了 postgreSQL,这很简单:当您进行查询时,您可以:

$result = pg_query($conn, "SELECT author, email FROM authors WHERE dest='" + pg_escape_string($s) + "'");

简单。安全(据我所知)。

现在我想用 C# 中的 SQLite 做同样的事情:

SQLiteCommand query = m_conn.CreateCommand();
query.CommandText = "SELECT author, email FROM authors WHERE dest=@param";
query.Parameters.Add("@dest", SqlDbType.String).Value = s;
m_datareader = query.ExecuteReader();

是不是有点过分了?如果不是,为什么?

据我所知,最后,发送到数据库的字符串仍然是一个字符串,为什么要通过这个而不是手动清理不安全的字符串?如果在 ASP .NET 中将一些不安全的文本打印到 HTML 中也是

htmlAdd.Text("<div>@param1</div>");
htmlAdd.Parameters.Add("@param1").Value = unsafeUsername;

?

我想上这门课:

class QueryResultSet
{
public QueryResultSet(SQLiteConnection conn, string queryText)
{
m_conn = conn;
m_conn.Open();
SQLiteCommand query = m_conn.CreateCommand();
query.CommandText = queryText;
m_datareader = query.ExecuteReader();
}
public object this[string key]
{
get { return m_datareader[key]; }
}
public bool Read()
{
return m_datareader.Read();
}
~QueryResultSet()
{
m_conn.Close();
}
private SQLiteConnection m_conn;
private SQLiteDataReader m_datareader;
}

但现在我必须更改方法:

public QueryResultSet(SQLiteConnection conn, string queryText, Dictionary<string,string> params)

这将导致方法之前的代码和其中的代码大小加倍。

有什么标准的方法吗?如果此类不是一个好主意,如何避免为每个请求执行 10 行?

最佳答案

参数化查询是更好的选择,因为它们通常是类型安全的,可以为您处理任何转义、文字格式等,并允许服务器/后端缓存编译的查询以获得更好的性能。

大多数数据库引擎都允许您执行“普通旧 sql”和参数化查询。

当然,构建完整的 SQL 字符串需要您了解 RDBMS 使用的确切格式和数据类型,因为它们各不相同。

关于c# - C# 中的 SQL - 为什么这么冗长?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6871291/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com