在这里,我们将给大家分享关于检查SQLServer登录是否已存在的知识,让您更了解sqlserver查看登录记录的本质,同时也会涉及到如何更有效地Mysql插入记录时检查记录是否已经存在,存在则更新,
在这里,我们将给大家分享关于检查 SQL Server 登录是否已存在的知识,让您更了解sqlserver查看登录记录的本质,同时也会涉及到如何更有效地Mysql 插入记录时检查记录是否已经存在,存在则更新,不存在则插入记录SQL、php – 检查数据是否已存在于MySQL中、SQL Server:检查表列是否存在并删除行、sql-server – SQL Server 2008 R2错误:15023,用户,组或角色已存在的内容。
本文目录一览:- 检查 SQL Server 登录是否已存在(sqlserver查看登录记录)
- Mysql 插入记录时检查记录是否已经存在,存在则更新,不存在则插入记录SQL
- php – 检查数据是否已存在于MySQL中
- SQL Server:检查表列是否存在并删除行
- sql-server – SQL Server 2008 R2错误:15023,用户,组或角色已存在
检查 SQL Server 登录是否已存在(sqlserver查看登录记录)
我需要检查 SQL Server 上是否已经存在特定的登录名,如果不存在,则需要添加它。
我找到了以下代码来实际将登录名添加到数据库中,但我想将其包装在一个 IF 语句中(以某种方式)以检查登录名是否存在。
CREATE LOGIN [myUsername] WITH PASSWORD=N''myPassword'', DEFAULT_LANGUAGE=[us_english], CHECK_EXPIRATION=OFF, CHECK_POLICY=OFF GO
我知道我需要查询系统数据库,但不知道从哪里开始!
答案1
小编典典从这里
If not Exists (select loginname from master.dbo.syslogins where name = @loginName and dbname = ''PUBS'')Begin Select @SqlStatement = ''CREATE LOGIN '' + QUOTENAME(@loginName) + '' FROM WINDOWS WITH DEFAULT_DATABASE=[PUBS], DEFAULT_LANGUAGE=[us_english]'') EXEC sp_executesql @SqlStatementEnd
Mysql 插入记录时检查记录是否已经存在,存在则更新,不存在则插入记录SQL
Mysql 插入记录时检查记录是否已经存在,存在则更新,不存在则插入记录SQL
我们在开发数据库相关的逻辑过程中, 经常检查表中是否已经存在这样的一条记录, 如果存在则更新或者不做操作, 如果没有存在记录,则需要插入一条新的记录。
这样的逻辑固然可以通过两条sql语句完成。
SELECT COUNT(*) FROM xxx WHERE ID=xxx;
if (x == 0)
INSERT INTO xxx VALUES;
else
UPDATE xxx SET ;
但是这样操作在性能上有所损失, 代码结构感觉有点丑陋。
其实Mysql提供了可以在一个SQL语句中完成上述逻辑的支持。
官方文档如下:
MySQL provides many extentions to SQL which help performance in many common use scenarios. Among these are INSERT ... SELECT, INSERT ... ON DUPLICATE KEY UPDATE, and REPLACE.
I rarely hesitate to use the above since they are so convenient and provide real performance benefits in many situations. MySQL has other keywords which are more dangerous, however, and should be used sparingly. These include INSERT DELAYED, which tells MySQL that it is not important to insert the data immediately (say, e.g., in a logging situation). The problem with this is that under high load situations the insert might be delayed indefinitely, causing the insert queue to baloon. You can also give MySQL index hints about which indices to use. MySQL gets it right most of the time and when it doesn''t it is usually because of a bad scheme or poorly written query.
重要的就是上面提到的 :
INSERT ... SELECT
INSERT ... ON DUPLICATE KEY UPDATE
INSERT ... ON DUPLICATE REPLACE
比如想往表中插入一条数据,如果表中没有该条数据才插入,如果已经存在该条数据就不插入。
首先,在创建表时,将不需要重复的字段设置为unique,然后在插入时,使用insert ignore语句。
例如:(数据库用的是mysql5) 创建一张表用来存储用户: create table user_info ( uid mediumint(10) unsigned NOT NULL auto_increment primary key, last_name char(20) not null, first_name char(20) not null, unique ( last_name, first_name) ); alter table anser add UNIQUE (last_name,first_name) 插入数据: insert ignore into user_info (last_name,first_name) values (''x'',''y''); 这样一来,如果表中已经存在last_name=''x''且first_name=''y''的数据,就不会插入,如果没有就会插入一条新数据。
上面的是一种用法, 也可以用 INSERT .... SELECT 来实现。
php – 检查数据是否已存在于MySQL中
我正在尝试检查数据状况.如果数据已存在,则不会插入.否则会插入.但问题是数据仍然插入虽然它已经存在!
<?PHP
if($_SERVER['REQUEST_METHOD']=='POST'){
//Getting values
$project = strtoupper($_POST['project']);
if($project != null)
{
//Importing our db connection script
require_once('dbConnect.PHP');
$sql="SELECT * FROM Project WHERE project='$project'";
$check=MysqLi_fetch_array(MysqLi_query($con,sql));
if(isset($check))
{
// no need insert
}
else{
//Creating an sql query
$sql = "INSERT INTO Project(project) VALUES ('$project')";
}
//Executing query to database
if(MysqLi_query($con,$sql)){
echo ' Added Successfully';
}else{
echo 'Could Not Add Project';
}
}
else
{
echo "data is null";
}
//Closing the database
MysqLi_close($con);
}
?>
解决方法:
您的代码中存在多个问题.我将首先回答你的问题.永远不会设置$check,因为您的查询没有被执行. $sql中缺少$.此外,在查询中使用之前,您始终需要清理/转义用户输入.如果你没有对它进行消毒,那么黑客可能会在你的查询中注入不需要的代码,做你不想做的事情.请参阅下面的更新和优化代码:
<?PHP
if($_SERVER['REQUEST_METHOD']=='POST'){
//Getting values
if(isset($_POST['project']) && !empty($_POST['project'])){
//Importing our db connection script
require_once('dbConnect.PHP');
$project = strtoupper($_POST['project']);
//Security: input must be sanitized to prevent sql injection
$sanitized_project = MysqLi_real_escape_string($con, $project);
$sql = 'SELECT * FROM Project WHERE project=' . $sanitized_project . ' LIMIT 1';// LIMIT 1 prevents sql from grabbing unneeded records
$result = MysqLi_query($con, $sql);
if(MysqLi_num_rows($result) > 0){
// a match was found
// no need insert
}
else{
//Creating an sql query
$sql = "INSERT INTO Project(project) VALUES ('$sanitized_project')";
//Executing query to database
if(MysqLi_query($con,$sql)){
echo('Added Successfully');
}
else{
echo('Could Not Add Project');
}
}
else{
echo('data is null');
}
//Closing the database
MysqLi_close($con);
}
?>
SQL Server:检查表列是否存在并删除行
我目前正在编写一个通用的SQL
Server脚本,以清理具有更多/更少相同表结构的不同数据库。此脚本要求我擦除表中的某些数据(如果该表存在于数据库中)。这里是脚本示例
IF EXISTS( SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'TAB1')
IF EXISTS( SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'TAB1' AND COLUMN_NAME = 'COL1')
delete TAB1 where COL1 not in (select COL2 from TAB2);
作为程序员,我知道如果两个条件块都为false,则不会执行delete命令。但是,当我在SQL中运行它时,它会返回
无效的列名“ COL1”。
我的方法可能是错误的。谁能指出我正确的方向?
sql-server – SQL Server 2008 R2错误:15023,用户,组或角色已存在
我无法访问报告数据库,应用程序的帮助文档说明要执行以下操作:
Resolution: 1. Launch the sql Server Management Studio and connect to the database server(s) hosting the Vision and Reporting Server databases. 2. Expand the security folder. 3. Select logins and right click on the <username> user and choose properties. 4. Click the User Mapping tab 5.Make sure the following databases are selected in the Users mapped to this Login: reportserver reportserverTempDB Your Vision databases This maps the login/user to the respective databases. 6. As you select each database (including your Vision database),select the db_owner role in the Database role membership for: section. You must select this option for each database.
当我这样做时,我收到以下错误:
"Create Failed for user '<servername>\<username>'. User,group,or role '<servername>\<username>' already exists in the current database. (Microsoft sql Server,Error: 15023)"
我用Google搜索了这个错误,并在每个数据库上尝试了以下命令:
ALTER USER [<username>] WITH LOGIN = [<username>]
该消息表明命令已成功完成,但当我尝试按照上面的说明映射每个数据库时,我仍然收到上述错误.
我错过了什么?
Per Kin的评论(谢谢)我试过这个:
– 我右键单击了用户并选择了:Script Login As>删除并创建到>新的查询窗口.
– 我运行生成的查询并尝试通过再次选择其他两个数据库和db_owner来映射用户角色,但我仍然收到与上面相同的错误消息.
思考?
解决方法
对于初学者来说,如果它只是一个或两个用户,那么最简单的方法是从已恢复的数据库中删除数据库用户,并提供已有的现有服务器登录,使用SSMS将数据库用户重新映射到服务器登录.如果服务器登录不存在,那么只需创建它,映射用户,然后运行!我们走了.
下一个选项:如果要迁移大量用户,请使用sp_help_revlogin. sp_help_revlogin是Microsoft提供的存储过程,可帮助将登录从一个服务器迁移到另一个服务器,包括密码和SID.这是一篇关于SP_HELP_REVLOGIN的好文章
今天关于检查 SQL Server 登录是否已存在和sqlserver查看登录记录的分享就到这里,希望大家有所收获,若想了解更多关于Mysql 插入记录时检查记录是否已经存在,存在则更新,不存在则插入记录SQL、php – 检查数据是否已存在于MySQL中、SQL Server:检查表列是否存在并删除行、sql-server – SQL Server 2008 R2错误:15023,用户,组或角色已存在等相关知识,可以在本站进行查询。
在这篇文章中,我们将带领您了解相当于 SQL Server 的 LIMIT 和 OFFSET?的全貌,同时,我们还将为您介绍有关com.microsoft.sqlserver.jdbc.SQLServerException: “OFFSET” 附近有语法错误。、com.microsoft.sqlserver.jdbc.SQLServerException: “OFFSET”附近有语法错误。、jeecg 使用 sqlserver 分页查询,报错 limit 错误?sqlserver 中没有 limit 查询 怎么办、limit offset,n揭秘_MySQL的知识,以帮助您更好地理解这个主题。
本文目录一览:- 相当于 SQL Server 的 LIMIT 和 OFFSET?
- com.microsoft.sqlserver.jdbc.SQLServerException: “OFFSET” 附近有语法错误。
- com.microsoft.sqlserver.jdbc.SQLServerException: “OFFSET”附近有语法错误。
- jeecg 使用 sqlserver 分页查询,报错 limit 错误?sqlserver 中没有 limit 查询 怎么办
- limit offset,n揭秘_MySQL
相当于 SQL Server 的 LIMIT 和 OFFSET?
在 PostgreSQL 中有Limit
andOffset
关键字可以很容易地对结果集进行分页。
SQL Server 的等效语法是什么?
答案1
小编典典相当于LIMIT
is SET ROWCOUNT
,但如果你想要通用分页,最好写一个这样的查询:
;WITH Results_CTE AS( SELECT Col1, Col2, ..., ROW_NUMBER() OVER (ORDER BY SortCol1, SortCol2, ...) AS RowNum FROM Table WHERE <whatever>)SELECT *FROM Results_CTEWHERE RowNum >= @OffsetAND RowNum < @Offset + @Limit
这里的优点是偏移量和限制的参数化,以防您决定更改分页选项(或允许用户这样做)。
注意: 参数应该使用从@Offset
一开始的索引,而不是正常的从零开始的索引。
com.microsoft.sqlserver.jdbc.SQLServerException: “OFFSET” 附近有语法错误。
SSM 项目在使用 SQLServer2012 和 Pagehelper 插件做分页时候,报错信息如下:
### SQL: SELECT t.column1,t.column2,t.column3 FROM tableName t OFFSET ? ROWS FETCH NEXT ? ROWS ONLY
### Cause: com.microsoft.sqlserver.jdbc.SQLServerException: “OFFSET”附近有语法错误。将打印输出的SQL语句放到SQLServer2012 客户端上执行,依旧报同样的错。
想到同样的配置在做MYSQL查询时候是没问题,SQL dialect 参数也没问题。后来在网上查询到一个SQLServer2012 分页语句的语法,说SQLSERVER2012 用 “FETCH NEXT ” 关键字分页时候 ORDER BY 是必须写的,于是在 “OFFSET” 前加上 "ORDER BY" 排序条件,不报错了。
com.microsoft.sqlserver.jdbc.SQLServerException: “OFFSET”附近有语法错误。
SSM项目在使用SQLServer2012和Pagehelper 插件做分页时候,报错信息如下:
### SQL: SELECT t.column1,t.column2,t.column3 FROM tableName t OFFSET ? ROWS FETCH NEXT ? ROWS ONLY
### Cause: com.microsoft.sqlserver.jdbc.SQLServerException: “OFFSET”附近有语法错误。将打印输出的SQL语句放到SQLServer2012 客户端上执行,依旧报同样的错。
想到同样的配置在做MYSQL查询时候是没问题,SQL dialect 参数也没问题。后来在网上查询到一个SQLServer2012 分页语句的语法,说SQLSERVER2012 用 “FETCH NEXT ” 关键字分页时候 ORDER BY 是必须写的,于是在 “OFFSET” 前加上 "ORDER BY" 排序条件,不报错了。
jeecg 使用 sqlserver 分页查询,报错 limit 错误?sqlserver 中没有 limit 查询 怎么办
jeecg 使用 sqlserver 分页查询,报错 limit 错误?sqlserver 中没有 limit 查询 怎么办limit offset,n揭秘_MySQL
今天利用limit offset,n从一个表中分批导出数据的时候,总比原表少那么几条记录,创建一个小表做测试才发现其中的奥秘:
mysql> select * from sss1;<br>+----+------+------+<br>| id | name | c_id |<br>+----+------+------+<br>| 1 | aaa | 1 | <br>| 2 | bbb | 2 | <br>| 3 | ccc | 3 | <br>| 4 | ddd | 1 | <br>| 5 | eee | 4 | <br>| 6 | ffff | 6 | <br>| 7 | NULL | 0 | <br>| 8 | NULL | 0 | <br>| 9 | NULL | 0 | <br>| 10 | ssss | 0 | <br>| 11 | ooo | 0 | <br>| 12 | 234 | 0 | <br>+----+------+------+<br>12 rows in set (0.00 sec)<br><br>mysql> select * from sss1 limit 0,3;<br>+----+------+------+<br>| id | name | c_id |<br>+----+------+------+<br>| 1 | aaa | 1 | <br>| 2 | bbb | 2 | <br>| 3 | ccc | 3 | <br>+----+------+------+<br>3 rows in set (0.00 sec)<br><br>mysql> select * from sss1 limit 4,6; <br>+----+------+------+<br>| id | name | c_id |<br>+----+------+------+<br>| 5 | eee | 4 | <br>| 6 | ffff | 6 | <br>| 7 | NULL | 0 | <br>| 8 | NULL | 0 | <br>| 9 | NULL | 0 | <br>| 10 | ssss | 0 | <br>+----+------+------+<br>6 rows in set (0.00 sec)
看明白了吗?
如果有offset的话,就会从offset+1条开始显示,越过第offset条,所以分批后我才会少几条记录,刚好是我的offset点,解决办法:offset 和上一条的n保持一致就行了:
mysql> select * from sss1;<br>+----+------+------+<br>| id | name | c_id |<br>+----+------+------+<br>| 1 | aaa | 1 | <br>| 2 | bbb | 2 | <br>| 3 | ccc | 3 | <br>| 4 | ddd | 1 | <br>| 5 | eee | 4 | <br>| 6 | ffff | 6 | <br>| 7 | NULL | 0 | <br>| 8 | NULL | 0 | <br>| 9 | NULL | 0 | <br>| 10 | ssss | 0 | <br>| 11 | ooo | 0 | <br>| 12 | 234 | 0 | <br>+----+------+------+<br>12 rows in set (0.00 sec)<br><br>mysql> select * from sss1 limit 0,3;<br>+----+------+------+<br>| id | name | c_id |<br>+----+------+------+<br>| 1 | aaa | 1 | <br>| 2 | bbb | 2 | <br>| 3 | ccc | 3 | <br>+----+------+------+<br>3 rows in set (0.00 sec)<br><br>mysql> select * from sss1 limit 3,6; <br>+----+------+------+<br>| id | name | c_id |<br>+----+------+------+<br>| 4 | ddd | 1 | <br>| 5 | eee | 4 | <br>| 6 | ffff | 6 | <br>| 7 | NULL | 0 | <br>| 8 | NULL | 0 | <br>| 9 | NULL | 0 | <br>+----+------+------+<br>6 rows in set (0.00 sec)
我们今天的关于相当于 SQL Server 的 LIMIT 和 OFFSET?的分享就到这里,谢谢您的阅读,如果想了解更多关于com.microsoft.sqlserver.jdbc.SQLServerException: “OFFSET” 附近有语法错误。、com.microsoft.sqlserver.jdbc.SQLServerException: “OFFSET”附近有语法错误。、jeecg 使用 sqlserver 分页查询,报错 limit 错误?sqlserver 中没有 limit 查询 怎么办、limit offset,n揭秘_MySQL的相关信息,可以在本站进行搜索。
如果您对mySQL::insert into table,来自另一个表的数据?感兴趣,那么这篇文章一定是您不可错过的。我们将详细讲解mySQL::insert into table,来自另一个表的数据?的各种细节,此外还有关于Linq join - 在一个表中显示所有数据并补充来自另外两个表的数据、mysql ::插入表中,来自另一个表的数据?、MySQL INSERT INTO table VALUES.. vs INSERT INTO table SET、mysql 两个数据库中表的结构不同,如何把一个表中的数据导入到另一个表中的实用技巧。
本文目录一览:- mySQL::insert into table,来自另一个表的数据?
- Linq join - 在一个表中显示所有数据并补充来自另外两个表的数据
- mysql ::插入表中,来自另一个表的数据?
- MySQL INSERT INTO table VALUES.. vs INSERT INTO table SET
- mysql 两个数据库中表的结构不同,如何把一个表中的数据导入到另一个表中
mySQL::insert into table,来自另一个表的数据?
我想知道是否有一种方法可以纯粹在 sql 中执行此操作:
q1 = SELECT campaign_id, from_number, received_msg, date_received FROM `received_txts` WHERE `campaign_id` = ''8'';INSERT INTO action_2_members (campaign_id, mobile, vote, vote_date) VALUES(q1.campaign_id, q1.from_number, q1.received_msg, q1.date_received);
注意: q1 将返回大约 30k 行。
有什么方法可以在直接 sql 中执行我在上面尝试的操作吗?直接从一个表(基本上是原始数据表)中提取数据并插入另一个表(基本上是处理过的数据表)?
答案1
小编典典INSERT INTO action_2_members (campaign_id, mobile, vote, vote_date) SELECT campaign_id, from_number, received_msg, date_received FROM `received_txts` WHERE `campaign_id` = ''8''
Linq join - 在一个表中显示所有数据并补充来自另外两个表的数据
如何解决Linq join - 在一个表中显示所有数据并补充来自另外两个表的数据?
我无法想象这是一个独特的问题,我显然没有正确的知识来理解要搜索的内容。
我有三张桌子。我想显示第一个表(ToolList)中的所有数据并填写第二个和第三个表中的数据:
$.get("site.com/ajax",function(status,data){
alert(status);
});
ToolLists 有工具 A、工具 B 和工具 C 的记录。
ToolLocation 有工具 A 位置 123 的记录。
TemplateLocation 有工具 C 位置 654 的记录
列表如下所示: 工具 A,123,- 工具 B,-,- 工具 C,654
我的实体框架 Linq 如下所示:
ToolLists
ToolLocation
TemplateLocation
我没有得到任何结果。当我没有包含第三个表时,我得到了结果:
var test = (from t in db.ToolLists
join l in db.ToolLocations on t.ToolNumber equals l.ToolNumber
join temp in db.TemplateLocations on t.ToolNumber equals temp.ToolNumber
orderby t.ToolNumber
select new { ToolNumber = t.ToolNumber,ToolLocation = l.Location,TemplateLocation = temp.Location }
);
解决方法
尝试进行左连接而不是内连接
var test = (from t in db.ToolLists
join l in db.ToolLocations on t.ToolNumber equals l.ToolNumber into lj
from l in lj.DefaultIfEmpty()
join temp in db.TemplateLocations on t.ToolNumber equals temp.ToolNumber into tempj
from temp in tempj.DefaultIfEmpty()
orderby t.ToolNumber
select new { ToolNumber = t.ToolNumber,ToolLocation = l.Location,TemplateLocation = temp.Location }).ToList();
mysql ::插入表中,来自另一个表的数据?
我想知道是否有一种方法可以完全在sql中执行此操作:
q1 = SELECT campaign_id, from_number, received_msg, date_received FROM `received_txts` WHERE `campaign_id` = ''8'';INSERT INTO action_2_members (campaign_id, mobile, vote, vote_date) VALUES(q1.campaign_id, q1.from_number, q1.received_msg, q1.date_received);
注意: q1将返回约3万行。
有什么办法可以在直式sql中完成上述操作?要直接从一个表(基本上是原始数据表)中提取数据并插入到另一个表(基本上是已处理数据表)中?
答案1
小编典典INSERT INTO action_2_members (campaign_id, mobile, vote, vote_date) SELECT campaign_id, from_number, received_msg, date_received FROM `received_txts` WHERE `campaign_id` = ''8''
MySQL INSERT INTO table VALUES.. vs INSERT INTO table SET
INSERT INTO table VALUES ..
和 之间的主要区别是什么INSERT INTO table SET
?
例子:
INSERT INTO table (a, b, c) VALUES (1,2,3)INSERT INTO table SET a=1, b=2, c=3
而这两者的表现呢?
答案1
小编典典据我所知,两种语法都是等价的。第一个是 SQL 标准,第二个是 MySQL 的扩展。
因此,它们在性能方面应该完全相同。
http://dev.mysql.com/doc/refman/5.6/en/insert.html说:
INSERT 将新行插入到现有表中。语句的 INSERT … VALUES 和 INSERT … SET
形式根据显式指定的值插入行。INSERT … SELECT 表单插入从另一个表或多个表中选择的行。
mysql 两个数据库中表的结构不同,如何把一个表中的数据导入到另一个表中
mysql 两个数据库中表的结构不同,怎么把一个表中的数据导入到另一个表中
mysql 两个数据库中表的结构不同,怎么把一个表中的数据导入到另一个表中
------解决方案--------------------
将表A中的查出来经过php处理将指定的字段用自定义的东西填充或者取出多出的字段然后放入到B表中
------解决方案--------------------
怎么个不同法?
给出两表结构,并说明需要将哪个表的哪些字段导入到另一个表的哪些字段中去
------解决方案--------------------
我去,这数据表,这么多个字段,你是把所有字段都放一个表了么?
------解决方案--------------------
你没有给出把哪个字段放到哪个字段中去
------解决方案--------------------
你已经完成大半了
例如
insert into job_hr (m_address) values select companyaddr from jobinfo
------解决方案--------------------
当然不能一个一个添加,就是加了,也是不对
insert into 库1.job_hr (字段列表) values select 对应的字段列表 from 库2.jobinfo
------解决方案--------------------
根据主健,联表更新
------解决方案--------------------
11# 真高手~ 那如果数据类型不一样 比如两个都是char呢 也能吗?
关于mySQL::insert into table,来自另一个表的数据?的问题就给大家分享到这里,感谢你花时间阅读本站内容,更多关于Linq join - 在一个表中显示所有数据并补充来自另外两个表的数据、mysql ::插入表中,来自另一个表的数据?、MySQL INSERT INTO table VALUES.. vs INSERT INTO table SET、mysql 两个数据库中表的结构不同,如何把一个表中的数据导入到另一个表中等相关知识的信息别忘了在本站进行查找喔。
如果您想了解WCF ServiceHost访问权限的相关知识,那么本文是一篇不可错过的文章,我们将对fido uaf client 访问权限进行全面详尽的解释,并且为您提供关于.net – ServiceHost和WebServiceHost有什么区别?、.net – WCF :: ServiceHost:奇怪……即使线程死了还活着?、.net – WCF @ServiceHost Debug =“true”但web.config compilation =“false”、ASP.NET中Webservice安全 实现访问权限控制的有价值的信息。
本文目录一览:- WCF ServiceHost访问权限(fido uaf client 访问权限)
- .net – ServiceHost和WebServiceHost有什么区别?
- .net – WCF :: ServiceHost:奇怪……即使线程死了还活着?
- .net – WCF @ServiceHost Debug =“true”但web.config compilation =“false”
- ASP.NET中Webservice安全 实现访问权限控制
WCF ServiceHost访问权限(fido uaf client 访问权限)
通过WCF教程时出现以下错误。
HTTP无法注册URL http:// +:8000 / ServiceModelSamples / Service
/。您的进程没有对此名称空间的访问权限(有关详细信息,请参见http://go.microsoft.com/fwlink/?LinkId=70353)。
这是由Windows 7的限制引起的吗?
答案1
小编典典问题是该URL被Windows阻止创建。
修复步骤:以管理员身份运行命令提示符。将网址添加到ACL
netsh http add urlacl url=http://+:8000/ServiceModelSamples/Service user=mylocaluser
.net – ServiceHost和WebServiceHost有什么区别?
Uri baseAddress = new Uri("http://localhost:8080/test"); ServiceHost host = new ServiceHost(typeof(TestService),baseAddress); host.open();
和
Uri baseAddress = new Uri("http://localhost:8080/test"); WebServiceHost host = new WebServiceHost(typeof(TestService),baseAddress); host.open();
所有的书都推荐使用webServiceHost,但为什么我看不出差异?
解决方法
它默认带有WebHttpBinding和WebHttpBehavior. (好的是你不需要配置文件,只是为了简单使用.)
从MSDN开始:
When you use WebServiceHost instead of ServiceHost,it will automatically create a Web endpoint for you using the base HTTP address and configure the injected endpoint with the WebHttpBehavior
.net – WCF :: ServiceHost:奇怪……即使线程死了还活着?
经过一番研究,我决定在我的应用程序中使用WCF进行进程间通信,所以我使用的是NetNamedPipeBinding绑定.
ServiceHost托管应用程序不是专用服务器,因此必须通过线程生成ServiceHost.到现在为止还挺好.
所以我有以下内容:
Foo() { Thread serverThread = new Thread(new ThreadStart(ServerThread)); serverThread.Start(); Console.WriteLine("Foo Exited"); } ServerThread() { Uri baseAddress = new Uri("net.pipe://localhost/service"); ServiceHost serviceHost = new ServiceHost(typeof(MyService),baseAddress); ... serviceHost.open(); Console.WriteLine("Server Thread Exited"); }
正如所料,我看到:
-> Server Thread Exited -> Foo Exited
但令我惊讶的是,即使服务器运行的线程很兴奋,客户端仍然可以连接到serviceHost,服务主机正确处理请求!
那么,为什么ServiceHost仍在处理和处理请求,即使它的主线程(它创建的那个)已经死了?
还有一种更好的方法可以让ServerThread保持活动一段时间(真实){Thread.休眠状态(100);}?
谢谢.
解决方法
在您的情况下可能没有必要自己生成一个线程.只需在应用程序的主线程中打开ServiceHost即可.然后,您可以在主线程中执行其他操作,当您准备好终止主机时,只需调用serviceHost.Close().
这是我发现的非常好的描述:
http://www.code-magazine.com/article.aspx?quickid=0701041&page=1
.net – WCF @ServiceHost Debug =“true”但web.config compilation =“false”
@ServiceHost中的Debug属性是否覆盖Web.config的编译属性,还是web.config属性覆盖所有属性?
谢谢.
解决方法
The ASP.NET HTTP runtime handles ASP.NET requests but does not participate in the processing of requests destined for WCF services,even though these services are hosted in the same AppDomain as is the ASP.NET content. Instead,the WCF Service Model intercepts messages addressed to WCF services and routes them through the WCF transport/channel stack.
除非您在WCF的ASP.NET兼容模式下运行服务.在这种情况下…
Unlike the default side-by-side configuration,where the WCF hosting infrastructure intercepts WCF messages and routes them out of the HTTP pipeline,WCF services running in ASP.NET Compatibility Mode participate fully in the ASP.NET HTTP request lifecycle. In compatibility mode,WCF services use the HTTP pipeline through an IHttpHandler implementation,similar to the way requests for ASPX pages and ASMX Web services are handled.
如果我们接受这个断言,那么我们知道应该遵守配置继承.
如果你想确定你可以设置一个测试……
在ASP.NET兼容模式下运行的WCF服务可以访问HttpContext.Current及其关联状态.这意味着您可以询问IsDebuggingEnabled属性以查看您是否处于调试模式.您还可以使用某些编译器指令(如#if DEBUG)来查看是否已到达代码块.
我很想知道最终的判决是什么.我认为这个问题的关键在于它是否是在IIS中托管的WCF服务以及它是否在AspCompatibility模式下运行.
ASP.NET中Webservice安全 实现访问权限控制
一、 概述:
Web Services是由企业发布的完成其特定商务需求的在线应用服务,其他公司或应用软件能够通过Internet来访问并使用这项在线服务。它逻辑性的为 其他应用程序提供数据与服务.各应用程序通过网络协议和规定的一些标准数据格式(Http,XML,Soap)来访问Web Service,通过Web Service内部执行得到所需结果。由于它通过internet进行调用,必然存在网络用户都可以调用的安全问题。如何实现webservice的访问 权限限制,是使用webservice用户使用面临重要的问题,下文就给两种方案,从浅到深解决上面问题。
二、基于“soapheader” 特性的简单方法
1." soapheader" 概述
SOAP 标头提供了一种方法,用于将数据传递到 XML Web services 方法或从 XML Web services 方法传递数据,条件是该数据不直接与 XML Web services 方法的主功能相关。 多数情况下用来传递用户身份验证信息,当然它的作用远不止如此,有待于在实际应用中发掘。
2.soapheader实现用户身份验证代码
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Services; using System.Web.Services.Protocols; namespace UserCenter { public class MySoapHeader :SoapHeader { public string UserName { get; set; } public string PWD { get; set; } } /// <summary> /// MyMath 的摘要说明 /// </summary> [WebService(Namespace = "http://tempuri.org/")] [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] [System.ComponentModel.ToolboxItem(false)] // 若要允许使用 ASP.NET AJAX 从脚本中调用此 Web 服务,请取消对下行的注释。 // [System.Web.Script.Services.ScriptService] public class MyMath : System.Web.Services.WebService { public MySoapHeader sHeader; [WebMethod] public string HelloWorld() { return "Hello World"; } [WebMethod] [SoapHeader("sHeader")] public string add(int x, int y) { if (sHeader.UserName == "test" && sHeader.PWD == "test") { return (x + y).ToString(); } else { return null; } } } }
3.缺点分析:
(1)服务逻辑和用户权限验证逻辑混和,加大程序理解复杂度。
(2)权限逻辑重用性不高
二、基于“SoapExtensionAttribute” 特性的方法
1.SoapExtensionAttribute与SoapExtension概述
SoapExtension和SoapExtensio。Attribute两个类用于控制webservice序列化和反序列化的一般过程,可对webservice进行压缩和日志等功能进行控制.
2.实现代码
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Services; using System.Web.Services.Protocols; namespace XMLClass1.class15.content { [AttributeUsage(AttributeTargets.Method)] public class MyExtensionAttribute : SoapExtensionAttribute { int _priority = 1; public override int Priority { get { return _priority; } set { _priority = value; } } public override Type ExtensionType { get { return typeof(MyExtension); } } } public class MyExtension : SoapExtension { //这个override的方法会被调用四次 //分别是SoapMessageStage BeforeSerialize,AfterSerialize,BeforeDeserialize,AfterDeserialize public override void ProcessMessage(SoapMessage message) { if (message.Stage == SoapMessageStage.AfterDeserialize)//反序列化之后处理 { bool check = false; foreach (SoapHeader header in message.Headers) { if (header is MySoapHeader) { MySoapHeader myHeader = (MySoapHeader)header; if (myHeader.Name == "admin" || myHeader.PassWord == "admin") { check = true; break; } } } if (!check) throw new SoapHeaderException("认证失败", SoapException.ClientFaultCode); } } public override Object GetInitializer(Type type) { return GetType(); } public override Object GetInitializer(LogicalMethodInfo info, SoapExtensionAttribute attribute) { return null; } public override void Initialize(Object initializer) { } } public class MySoapHeader : SoapHeader { string _name; string _passWord; public string Name { get { return _name; } set { _name = value; } } public string PassWord { get { return _passWord; } set { _passWord = value; } } } /// <summary> /// headersoap2 的摘要说明 /// </summary> [WebService(Namespace = http://tempuri.org/)] [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] [System.ComponentModel.ToolboxItem(false)] // 若要允许使用 ASP.NET AJAX 从脚本中调用此 Web 服务,请取消对下行的注释。 // [System.Web.Script.Services.ScriptService] public class headersoap2 : System.Web.Services.WebService { public MySoapHeader header; [WebMethod] [MyExtensionAttribute] [SoapHeader("header", Direction = SoapHeaderDirection.In)] public string CheckHeader() { //业务逻辑. return "Something done"; } } }
以上就是Webservice的安全设置全部内容,希望能给大家一个参考,也希望大家多多支持PHP中文网。
更多ASP.NET中Webservice安全 实现访问权限控制相关文章请关注PHP中文网!
今天关于WCF ServiceHost访问权限和fido uaf client 访问权限的分享就到这里,希望大家有所收获,若想了解更多关于.net – ServiceHost和WebServiceHost有什么区别?、.net – WCF :: ServiceHost:奇怪……即使线程死了还活着?、.net – WCF @ServiceHost Debug =“true”但web.config compilation =“false”、ASP.NET中Webservice安全 实现访问权限控制等相关知识,可以在本站进行查询。
针对React.useState 不会从 props 重新加载状态和react usestate不起作用这两个问题,本篇文章进行了详细的解答,同时本文还将给你拓展8. react 基础 - props 默认值和类型限制 与 Props , State , render 函数 关系、angular ui-router:当路径参数更改时如何重新加载状态,但在查询参数更改时如何不重新加载状态?、es6语法的reactjs的state状态和组件间props传递的实践、Flutter-Dart-与Future <>一起用于异步功能时,setState不会重新加载状态等相关知识,希望可以帮助到你。
本文目录一览:- React.useState 不会从 props 重新加载状态(react usestate不起作用)
- 8. react 基础 - props 默认值和类型限制 与 Props , State , render 函数 关系
- angular ui-router:当路径参数更改时如何重新加载状态,但在查询参数更改时如何不重新加载状态?
- es6语法的reactjs的state状态和组件间props传递的实践
- Flutter-Dart-与Future <>一起用于异步功能时,setState不会重新加载状态
React.useState 不会从 props 重新加载状态(react usestate不起作用)
我希望在道具更改时重新加载状态,但这不起作用,并且user
变量在下次useState
调用时不会更新,有什么问题?
function Avatar(props) { const [user, setUser] = React.useState({...props.user}); return user.avatar ? (<img src={user.avatar}/>) : (<p>Loading...</p>);}
密码笔
答案1
小编典典传递给 useState 的参数是初始状态,很像在类组件的构造函数中设置状态,并且不用于在重新渲染时更新状态
如果要更新道具更改的状态,请使用useEffect
钩子
function Avatar(props) { const [user, setUser] = React.useState({...props.user}); React.useEffect(() => { setUser(props.user); }, [props.user]) return user.avatar ? (<img src={user.avatar}/>) : (<p>Loading...</p>);}
工作演示
8. react 基础 - props 默认值和类型限制 与 Props , State , render 函数 关系
一. PropTypes 与 DefaultProps 官方文档
1. PropTypes 属性校验
引入 PropTypes
import PropTypes from ''prop-types'';
强校验 props 属性
eg:
import React, { Component } from ''react''
import PropTypes from ''prop-types''
class TodoItem extends Component{
constructor(props){
super(props);
}
}
// 校验 传递过来的 value 为 string 类型
// 校验 传递过来的 itemDelete 为 function 类型
// 校验 传递过来的 index 为 string 类型 并且必须要传递
// 如果传递的数据不对 会在 控制太报一个警告
TodoItem.propTypes = {
value: PropTypes.string,
itemDelete: PropTypes.func,
index: PropTypes.string.isRequired
}
export default TodoItem;
2.DefaultProps 设置默认值
eg:
import React, { Component } from ''react''
class TodoItem extends Component{
constructor(props){
super(props);
}
}
// 设置 props 的 test默认属性为 hello world
TodoItem.defaultProps = {
test: ''hello world''
}
export default TodoItem;
二. Props , State , render 函数 关系
// 当组件 的 props 和 state 发生改变时 render 方法会重新执行
// 当父组件 的 render 函数被运行时, 子组件 的 render 都会被运行
angular ui-router:当路径参数更改时如何重新加载状态,但在查询参数更改时如何不重新加载状态?
例如,我希望此导航更改可重新加载状态:
#/detail/1
#/detail/2
但我不希望此导航重新加载状态:
#/detail/1?search=blah
#/detail/1?search=huzzah
根据ui-router文档,设置reloadOnSearch: false
应可完成此操作,但请尝试以下操作。当reloadOnSearch ===
false
为时,即使文档说应该更改路径参数,它也不会重新加载状态。
Plunkr:http:
//run.plnkr.co/ZPy9uabYlkMilwdS/#/param
es6语法的reactjs的state状态和组件间props传递的实践
PS:开头的一段废话
想起一个月前还不知道reactjs该如何下手的而今天有点小体会,还是有点小欣慰,不过回望一些走过的坑和开始时的满头浆糊觉得还是有点恐怖的。今天分享一点实践中的小心得给新手朋友们。
reactjs的es6语法形式
其他的就不必多说,只说说两个点:
constructor和super
this.functionName=this.functionName.bind(this)
constructor(props)和super(props)一般是要么不出现,要么同时出现,意义实际上就是继承,这两个东西其实并不是reactjs的,而是es6的,前者就是一个一般意义的构造函数,相当于es5里面的
function FunctionName(props) {
this.props=props;
}
super(props)则是继承父类的属性,(意义相当于es5中的 function Son(name){ Parent.call(this, name) }),并在constructor内部正确拿到this,这个this指向此时的子类。如果在操作this之前(比如console.log(this))没有写super(props)则会报错,意思大概是:不能在super()之前写this!
而有时候看到constructor()和super(),即没有写props好像也没有什么问题,原因自然是没有在constructor内部用到this.props,实际上在constructor内部一般用到的是this.state居多,貌似this.props没怎么写。。。
this.functionName=this.functionName.bind(this)这个是绑定方法到子类上,使得这个this就是当前的子类(所谓的this指向)。还可以直接将.bind(this)写函数定义的地方,比如在render渲染的元素上 onClick={this.handleClick.bind(this)}.
this.state和this.setState({})以及propsName={stateName}
state在reactjs组件状态渲染里面的作用不言而喻,被称为状态渲染机,元素节点的各种属性值及其改变实际上基本是由state提供的状态值及其改变完成的。比如元素的文本改变、表单的value值、checked、disabled甚至css样式都可以做到用state来渲染。以下提供一个简例辅助说明:
import React from ''react'';
import ReactDOM from ''react-dom'';
import $ from ''jquery'';
class Comp extends React.Component {
constructor(){
super();
this.handleChange=this.handleChange.bind(this);
this.handleClick=this.handleClick.bind(this);
this.state={
value: "",
msg: ""
}
}
handleChange(e){
this.setState({
value: e.target.value
})
}
handleClick(){
let {value}=this.state;
$.ajax({
...
data: {
value:value
},
success:(data)=>{
this.setState({
msg: data
})
}
})
}
render(){
let {value,msg}=this.state;
return(
<div>
<input type="text" value={value} onChange={this.handleChange} />
<input type="button" value="提交" onClick={this.handleClick} />
<span>{msg? msg:"此处加载ajax返回的信息"}</span>
</div>
)
}
}
ReactDOM.render( <Comp />, document.body)
以上简例在页面上渲染之后是一个按钮、一个输入框和一个信息提示。由于reactjs提倡单向数据流,在value状态初始为空的情况下,如果直接在输入框中输入而不设置value状态(setState),输入信息无法获取。这个渲染过程是:首先页面加载时根据默认的this.state中的三个状态值生成相应的状态,onChange事件不断改变state的value值,此时state接收到了改变并马上重新渲染页面上输入框内的值,即:只要任何动作改变了state值,页面就会重新渲染相应的地方(关于其他reactjs入门案例demo可以参见本人的github)。
props属性以及传递
注意一下,以上说constructor内如果没有传递props参数,其内部就不能使用this.props。但这并不意味着其他地方比如render内部不能使用。目前只是体会到组件之间传递的props值的初始来源一般都是state值,可能是实践不够的原因 @_@。。。
1.父组件向子组件传值
这是比较常见的父子组件之间通信的方式。子组件上的属性值可以理解为一个参数,而需要父组件传递一个实际值。传值这种方式一般是复用组件所必需的,因为有可能有多个页面的内容的某一个部分高度相似甚至相同,这时只需要对一个组件传递不同的值就可以实现多次利用。如下例:
假定组件文件都在根目录下:
//子组件Son.js
class Son extends React.Component{
render(){
let {title,userValue,pwdValue,handleChange,handleSubmit}=this.props;
return(
<div>
<h3>{title}</h3>
<input type="text" value={userValue} onChange={(e)=>handleChange("user",e.target.value} />
<input type="password" value={pwdValue} onChange={(e)=>handleChange("pwd",e.target.value} />
<input type="button" value="提交" onClick={handleSubmit} />
</div>
)
}
}
//父组件1:Login.js
import Son from ''./Son.js'';
class Login extends React.Component{
constructor(){
super();
this.handleChange=this.handleChange.bind(this);
this.handleSubmit=this.handleSubmit.bind(this);
this.state={
user:{
value:"",
error:false
},
pwd:{
value:"",
error:false
}
}
}
handleChange(field,val){
let newState={value:val, error:true};
switch(field) {
case "user":
if (!val.length){
newState.error=false
} else if (val.length>4) {
newState.error=false
}
this.setState({
user:newState
})
break;
case "pwd":
if (!val.length){
newState.error=false;
} else if (val.length>6) {
newState.error=false
}
this.setState({
pwd:newState
})
break;
}
}
handleSubmit() {
let {user, pwd}=this.state;
if (!user.error || !pwd.error) {
alert("请重试!");
return;
} else {
$.ajax({
...
data: {
username: user.value,
password: pwd.value
},
...
})
}
render(){
let {user, pwd}=this.state;
return(
<Son title="请登录" userValue={user.value} pwdValue={pwd.value} handleChange={this.handleChange} handleSubmit={this.handleSubmit} />
)
}
}
相信各位看得出来,这是个登录页面的雏形,其中仅限原理说明,先不要纠结规范什么的哈。。。一般来说,既然有登录,也就有注册,注册页面基本上也是这个道理。需要说明的是:子组件上的属性值和方法都是this.props的,这里之所以没有写this.handleChange或者this.handleSubmit是因为子组件本身没有这个方法,因此如果此时在子组件上的方法前加上this.xxx就会报错大概说这个方法不是个函数!属性值也相似;同时利用拆包表达式写this.props表示这些属性和方法都是从父组件上继承而来,只要父组件上定义了方法,因此子组件上此时可以不用写constructor()和super()。
2.父组件的父组件子组件传值
这个场景主要用于组件嵌套比较多的时候。比如,我们发现在子组件Son.js中,有三个输入框分别是用户名、密码,但貌似有点不伦不类,那么我们就完善一点这个表单:
新建组件Form.js
class Form extends React.Component{
render(){
let {handleSubmit, userValue, pwdValue, handleChange}=this.props;
return(
<form onSubmit={handleSubmit} method="post" action="/submit">
<input type="text" name="user" value={userValue} onChange={(e)=>handleChange("user",e.target.value} />
<input type="password" name="pwd" value={pwdValue} onChange={(e)=>handleChange("pwd",e.target.value} />
<input type="submit" />
</form>
)
}
}
有了这个组件之后,关于表单的Son.js组件可以改造成(同样假定所有组件都在根目录下):
//Son.js
import Form from ''./Form.js'';
class Son extends React.Component{
render(){
let {title,userValue,pwdValue,handleChange,handleSubmit}=this.props;
return(
<div>
<h3>{title}</h3>
<Form
userValue={userValue}
pwdValue={pwdValue}
handleChange={handleChange}
handleSubmit={handleSubmit}
/>
</div>
)
}
}
也许新手童鞋们不太明白Son.js组件上的属性和方法命名到底是不是一定要和孙子级组件上的一样,因为本人在学这个地方的时候的确纠结过,不过请注意:只要onChange或者onSubmit这类元素上原生方法后指定的一个函数(Form.js),比如onChange={handleChange},那么这个handleChange在传递的时候,上级组件(Son.js)上的handleChange={handleChange}中,左边是上级组件的方法,可以新命名比如footChange。。。而右边则是传递给下级组件的方法handleChange,所以,下级组件Form.js中onChange的右边函数名必须对应之。
此外,我们还可以根据Son.js做个简单的欢迎页:
//Welcome.js
class Welcome extends React.Component{
render(){
return(
<h1>欢迎您!</h1>
)
}
}
//SonWelcome.js
import Welcome from ''./Welcome.js'';
class SonWelcome extends React.Component{
render(){
return(
<div>
<h3>{this.props.title}</h3>
<Welcome />
</div>
)
}
}
当然,SonWelcom.js太过简单了。。。同时title的值依赖于上一级组件传值确定,兄弟们大开脑洞吧。
3.非上下级关系和非兄弟的组件之间如何传值
相信这个情况是比较少的,不过这是个值得研究的,有一些师兄和大神们肯定知道如何解决。所谓的兄弟组件就是具有共同的父组件或者“爷组件”的多个组件,这种情况和以上差不多,主要把兄弟组件之间需要的共同的值挂载到上级组件即可。而非上下级和非兄弟组件这种情况的应用场景有点类似(注意,仅仅是类似)session或者cookie,比如有多个页面需要根据用户是否登录或者是否是管理员超级用户来对页面进行不同的渲染。
先说说可以解决的途径吧,首先推荐的是一个js库:PubSubJs,详情可以去了解一下(实际我也没用过。。。)。其次,说说本人的想法吧。正如上所言,假设这个属性或者方法在渲染组件的时候并不涉及安全性问题,那么何不将其设置为cookie或者session呢?哪个组件需要这个值就将其提出来。如下例两个组件:
暂且写如下,先不管自定义flag从何而来,同时,.active的样式是:display:none;
//CompOne.js
class CompOne extends React.Component{
render(){
return(
<div>
<p className={flag? "":"active"}>这个第一个组件</p>
</div>
)
}
}
//CompTwo.js
class CompTwo extends React.Component{
render(){
return(
<div>
<p className={flag? "active":""}>这个第二个组件</p>
</div>
)
}
}
假设以上两个组件并没有关系,且都带有一个共同的自定义属性flag,这两个组件根据flag的意义进行隐藏或展示。此时,可以建一个组件Cookie内部封装一个构造函数HandleCookie,内部封装三个方法setCookie(name, value, time),getCookie(name),clearCookie(name, value, time)。假设,name是cookie名称,value是cookie的值,time参数是参照当前时间的cookie的保存时间长度,设置为1表示一天后过期,设置-1则表示过期失效。
照此假定,以上两个组件可以直接在渲染页面的时候取到cookie的flag名称对应的值,并根据值渲染页面。比如在项目的某个文件加载完毕(componentDidMount)的时候设置一个cookie:{flag:"1"},CompOne.js:
//CompOne.js
import Cookie from ''./Cookie.js'';
class CompOne extends React.Component{
render(){
let flag=Cookie.getCookie("flag");
return(
<div>
<p className={flag? "":"active"}>这个第一个组件</p>
</div>
)
}
}
照此安排,这个组件CompOne渲染后就会展示,而CompTwo则会隐藏。不过,这种方式明显不是一种规范的方法,仅仅是想法而已,望轻喷!
写在结尾的话
以上若有不当之处,还请指正一下,给小弟一个改过自新的机会吧。。。如果童鞋还对其他没有写彻底的地方感兴趣,可以参见本人的一个留言本小项目,乃是本国reactjs、webpack配置、nodejs和express入门的最好材料之一,觉得好用就star一下吧,哎,求star真不好意思^_^
Flutter-Dart-与Future <>一起用于异步功能时,setState不会重新加载状态
您必须再次调用setState
来进行其他变量更改:
myFun(false).then((value) => setState(() => ESPSyncIconColor = value == 200));
,
请勿将setState与Future函数一起使用。在将来执行后设置状态。等待并稍后使用setState()。
onPressed: () {
infBtnColor = true; //this takes effect on click properly -always
Future<int> statusCode = myFun(false);
await statusCode.then((value) {
if (value == 200) {
ESPSyncIconColor = true; // this is to modify other icon from the AppBar
print("Btn GREEN");
}
else {
ESPSyncIconColor = false;
print("RED");
}
});
setState((){
});
}
,
您在setState
内部呼叫未来。直到setState
返回并重新构建窗口小部件之后,这个未来才能完成。相反,await
或then
将来,然后再致电setState
。
onPressed: () {
infBtnColor = true;
myFun(false).then((value) {
setState(() {
if (value == 200) {
ESPSyncIconColor = true; // this is to modify other icon from the AppBar
print("Btn GREEN");
} else {
ESPSyncIconColor = false;
print("RED");
}
});
});
}
,
以上所有答案都帮助我解决了此问题:
我的修改代码在这里,以防万一其他人遇到此问题。
SET @match_list = '["talkative","cooker"]';
SELECT COALESCE( SUM( matched),0 ) AS match_count
FROM
(
SELECT @i := @i + 1 AS rn,JSON_CONTAINS(JSON_KEYS(tags),JSON_EXTRACT(@match_list,CONCAT('$[',@i-1,']')),'$') AS matched
FROM information_schema.tables
CROSS JOIN t
CROSS JOIN (SELECT @i := 0) r
WHERE @i < JSON_LENGTH(@match_list)
) q;
match_count
-----------
2
我们今天的关于React.useState 不会从 props 重新加载状态和react usestate不起作用的分享就到这里,谢谢您的阅读,如果想了解更多关于8. react 基础 - props 默认值和类型限制 与 Props , State , render 函数 关系、angular ui-router:当路径参数更改时如何重新加载状态,但在查询参数更改时如何不重新加载状态?、es6语法的reactjs的state状态和组件间props传递的实践、Flutter-Dart-与Future <>一起用于异步功能时,setState不会重新加载状态的相关信息,可以在本站进行搜索。
本文标签: