在我的情况下,为什么命名或位置查询参数不适用于 NHibernate?
认为以下陈述是正确的:
在 Oracle 数据库 X 和 Y 版本 11.2.0.3.0 上,存在由“MyPassword”标识的角色“MyRole”,并授予我连接的用户。
这是一些代码:
public void SetRole(string roleName, string rolePassword)
{
if (HasRoleBeenSet) return;
try
{
session.CreateSQLQuery("SET ROLE ? IDENTIFIED BY ?")
.SetString(0, roleName)
.SetString(1, rolePassword)
.ExecuteUpdate();
HasRoleBeenSet = true;
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
}
SetRole("MyRole", "MyPassword");
Run Code Online (Sandbox Code Playgroud)
抛出以下异常:
NHibernate.Exceptions.GenericADOException:无法执行本机批量操作查询:SET ROLE?由 ? [SQL: SET ROLE :p0 IDENTIFIED BY :p1] ---> System.Data.OracleClient.OracleException: ORA-01937: 角色名称丢失或无效
当我使用 Toad 套件中包含的 SQLMonitor 时,发送到数据库的 SQL 如下所示SET ROLE ? IDENTIFIED BY ?,错误Error occurred: …
我的查询具有以下选择器,
{
"selector": {
"_id": {
"$gt": null
},
"series": {
"$regex": "(?i)mario"
}
}
}
Run Code Online (Sandbox Code Playgroud)
现在,如果我有一个带有 的文档series = mario12,上面的查询将返回这个不应该发生的文档。我希望我的查询只忽略“马里奥”的情况。
如何实现不区分大小写?
private void FillInvoiceList()
{
DataTable distinctInvoice = new DataTable();
using (SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["APOS_CONNECTION_STRING"].ConnectionString))
{
conn.Open();
SqlCommand cmd = new SqlCommand("Select distinct svc_tag from data where rep_name = @value");
cmd.Parameters.AddWithValue("@value", this.DropDownList1.SelectedItem.Text);
SqlDataAdapter sqlDataAdapter = new SqlDataAdapter(cmd.CommandText, conn.ConnectionString);
sqlDataAdapter.Fill(distinctInvoice);
}
foreach (DataRow row in distinctInvoice.Rows)
{
this.ListBox1.Items.Add(row["svc_tag_dim_invoice_num"].ToString());
}
}
Run Code Online (Sandbox Code Playgroud)
我有这个代码,当我调用Fill(DistinctInvoice)时出现此错误
必须声明标量变量"@value"
我的FillInvoiceList()方法是从DropDownList1的SelectedIndexChanged事件中调用的.DropDownList1.SelectedItem.Text的值似乎是正确的.
谢谢你的帮助.
我正在进行参数化查询,但我没有得到正确的查询结果
这是我的代码
public MySqlCommand Get_Login(string clinetID, string loginID, string password, string branchID)
{
MySqlCommand objCommand = new MySqlCommand(this.Query);
objCommand.Parameters.AddWithValue("@ClientID", clinetID);
objCommand.Parameters.AddWithValue("@LoginID", loginID);
objCommand.Parameters.AddWithValue("@Password", password);
objCommand.Parameters.AddWithValue("@BranchID", branchID);
objCommand.CommandType = CommandType.Text;
return objCommand;
}
Run Code Online (Sandbox Code Playgroud)
在调试时这是我在"objCommand"中得到的
Select u.groupid,p.PersonId, p.designationid,concat(p.salutation,p.FName,'
',p.MName,' ',p.LName) as PersonName,tb.Type
BrType,p.OrgId,p.subdepartmentid,ifnull(crossdept,'N') as
crossdept,p.departmentid,u.defaultpage,p.orgid,ifnull(p.crosslab,'N') as crosslab,
(select indoor_services from dc_Tp_organization where orgid='@ClientID') as
indoor_services,(select name from dc_Tp_organization where orgid='@ClientID') as
orgname,
(select default_route from dc_Tp_organization where orgid='@ClientID') as
default_route,p.BranchID BranchID,tb.Name BRName from dc_tp_personnel p left outer
join
dc_tu_userright u on u.personid=p.personid …Run Code Online (Sandbox Code Playgroud) 来自 Google Bigquery 文档:
运行参数化查询
BigQuery 支持查询参数,以帮助防止使用用户输入构建查询时的 SQL 注入。此功能仅适用于标准 SQL 语法。
要指定命名参数,请使用 @ 字符后跟标识符,例如 @param_name。
Google Bigquery 有 python 和 Java 的示例代码来使用参数化查询。
https://cloud.google.com/bigquery/querying-data#bigquery-query-params-python
Google Bigquery 此处没有用于运行参数化查询的 php 示例代码。
我尝试在 php 中使用 @,就像在 python 和 java 代码中一样,但它不起作用。
有什么建议吗?
谢谢!
我根据 Elliott 和 Mosha 的要求添加了代码
代码:
$query = "SELECT * FROM [myproject.mydateset.users] where user_id = '$userId' LIMIT 1000";
$queryResults = $this->bigQuery->runQuery($query);
Run Code Online (Sandbox Code Playgroud)
这个查询没问题。但这并不能阻止sql注入。
我尝试将查询更改为
$query = "SELECT * FROM [myproject.mydateset.users] where user_id = '@$userId' LIMIT 1000";
Run Code Online (Sandbox Code Playgroud)
或者
$query = "SELECT * FROM [myproject.mydateset.users] …Run Code Online (Sandbox Code Playgroud) 一切正常,但这只是为了知道正确的练习/正确的方法/有意义的
说我有代码:
string query = "SELECT * FROM table WHERE parent_id=@parentId and id = @id";
OleDbCommand c = new OleDbCommand(query, _con);
Run Code Online (Sandbox Code Playgroud)
对于剩下的部分,以下哪项是正确的?:
c.Parameters.AddWithValue("@parentId", 1);
c.Parameters.AddWithValue("@id", 2);
Run Code Online (Sandbox Code Playgroud)
要么
c.Parameters.AddWithValue("parentId", 1);
c.Parameters.AddWithValue("id", 2);
Run Code Online (Sandbox Code Playgroud)
要么
c.Parameters.AddWithValue(@"parentId", 1);
c.Parameters.AddWithValue(@"id", 2);
Run Code Online (Sandbox Code Playgroud)
(我知道它不是第三个)第二个看起来正确的方式.所有这些都取决于SQL实际如何从代码中解释参数化参数.有什么想法吗?我特别要问,因为我不喜欢一个知识渊博的人嘲笑我编码的不良习惯,如果有的话可以在这里:)
更新:据我所知,即使msdn没有遵循约定,也使用第1和第2.我将坚持使用第一个明确的第一个.谢谢
根据我的理解,下面的代码应该创建一个参数化语句并为该参数添加一个值.参数为"@exp",并且添加到其中的值由用户输入确定.我存储了用户输入String exp;(不是我的选择别人写了这个函数的大部分).
SQl_Command.CommandText = "SELECT COUNT(*) As MyCount FROM members WHERE ([Primary Exp] = '@exp') AND ([Approved] = 'True') OR ([Approved] = 'True') AND ([Secondary Exp] = '@exp')";
SQl_Command.Parameters.Add("@exp", SqlDbType.NVarChar, 255);
SQl_Command.Parameters["@exp"].Value = exp;
Run Code Online (Sandbox Code Playgroud)
我的测试用例的期望结果是16但是此查询返回0.查询在从SQL Server 2008运行时起作用,如下所示.
SELECT COUNT(*) As MyCount
FROM members
WHERE ([Primary Exp] = 'Risk Management')
AND ([Approved] = 'True') OR ([Approved] = 'True')
AND ([Secondary Exp] = 'Risk Management')
Run Code Online (Sandbox Code Playgroud)
我应该可以使用Response.Write(SQl_Command.CommandText);我选择"风险管理"的地方,并打印出参数化查询:
SELECT COUNT(*) As MyCount
FROM members
WHERE ([Primary Exp] = 'Risk Management') …Run Code Online (Sandbox Code Playgroud) 今天在应用程序上完成一些插入/更新查询并遇到了我没想到的结果.
查询
我的插入查询看起来类似于:
PARAMETERS nm TEXT(10), st TEXT(2);
INSERT INTO park(pname, pstate)
VALUES([nm],[st]);
Run Code Online (Sandbox Code Playgroud)
他们的同伴更新是这样的:
PARAMETERS id LONG, nm TEXT(10), st TEXT(2);
UPDATE park
SET
pname = [nm], pstate = [st]
WHERE
ID = [id];
Run Code Online (Sandbox Code Playgroud)
他们更新的表与此类似:
park
ID LONG | pname TEXT(10) | pstate TEXT(2)
Run Code Online (Sandbox Code Playgroud)
意外结果
通过编写查询,我通过对数据库运行它并为各种参数提供测试值来测试每个查询.在插入查询之后,我将通过更新新插入的记录来测试更新.
在大多数情况下,表是空的,因此更新只会更新单个记录.
但是,只要我在先前填充的表上运行更新,我就发现查询正在尝试更新所有记录,而不仅仅是通过参数提供其ID的记录.
问题是为什么??
我正在查看参数化查询问题,我找不到使用SqlDataReader参数化查询来填充下拉列表的示例.
现在,我可以在这里使用我的代码填充我的下拉
if (!this.IsPostBack)
{
using (SqlConnection con = new SqlConnection(SQLConnectionString))
{
System.Data.SqlClient.SqlCommand go = new System.Data.SqlClient.SqlCommand();
con.Open();
go.Connection = con;
go.CommandText = "SELECT InsuredID, FirstName, LastName FROM [Lab2].[dbo].[INSURED]";
go.ExecuteNonQuery();
SqlDataReader readIn = go.ExecuteReader();
while (readIn.Read())
{
ddlHomeInsuredID.Items.Add(
new ListItem(readIn["InsuredID"].ToString() + " : " + readIn["FirstName"].ToString()
+ " " + readIn["LastName"].ToString()));
}
con.Close();
ddlHomeInsuredID.Items.Insert(0, new ListItem("--Select InsuredID--", "0"));
}
}
Run Code Online (Sandbox Code Playgroud)
但是,我想让这个select语句参数化.我怎样才能做到这一点?我很乐意编写参数化的插入语句,如下所示:
using (SqlConnection connection = new SqlConnection(SQLConnectionString))
{
SqlCommand command = new SqlCommand();
command.Connection = connection;
command.CommandType = …Run Code Online (Sandbox Code Playgroud)