我对 MetaMask 中的交易有一个关于值格式的问题,我将代码放在下面:
<script type="text/javascript">
const sendEthButton = document.querySelector('.sendEthButton');
sendEthButton.addEventListener('click', () => {
ethereum
.request({
method: 'eth_sendTransaction',
params: [
{
from: ethereum.selectedAddress,
to: '{{contractCreator}}',
value: '0x29a2241af62c0000',
},
],
})
.then((txHash) => console.log(txHash))
.catch((error) => console.error);
});
</script>
Run Code Online (Sandbox Code Playgroud)
我已将 MetaMask 正确连接到网站和 Ganache,当我按下页面中的按钮时,交易也会出现在插件中,但只有在代码中使用此值时,我才能看到正确的值 (3),但我不知道如何是格式化。
我尝试过 web3.toWei(number, 'ether') 和 web3.toHex(number) 但它显示了奇怪的值。
例如,如果我用 web3.toWei(1, ether) 替换该值,它会在 MetaMask 窗口中显示 4722.366483。
我有以下使用事务的方法。
private string getDocumentDetailsByNumber(string DocNumber)
{
SqlTransaction transaction = DALDBConnection.SqlConnection.BeginTransaction();
try
{
DataSet DocNum = new DataSet();
string sDocNumber = "";
string[] taleNamesDoc = new string[1];
taleNamesDoc[0] = "docnumber";
SqlParameter[] paramDoc = new SqlParameter[1];
paramDoc[0] = new SqlParameter("@DocumentNumber", DocNumber.ToString().Trim());
SqlHelper.FillDataset(transaction, CommandType.StoredProcedure, "spGetDocumentDetailsByNumber", DocNum, taleNamesDoc, paramDoc);
string docTitle = DocNum.Tables["docnumber"].Rows[0][0].ToString();
transaction.Commit();
return docTitle;
}
catch (Exception ex)
{
transaction.Rollback();
throw ex;
}
}
Run Code Online (Sandbox Code Playgroud)
多次运行该方法后,用户最终收到以下错误消息。
在从池中获取连接之前经过的超时时间
发生错误是因为我尚未关闭连接并且连接池已溢出。
我尝试在提交事务之前关闭连接。
transaction.Connection.Close();
transaction.Commit();
Run Code Online (Sandbox Code Playgroud)
然后得到以下错误。
这个SqlTransaction已经完成;它不再可用
如何关闭连接以避免错误?
我的 SQL 事务将 1000 从一个帐户转移到单个表帐户中的另一个帐户(名称,余额)?
我写了下面的查询,我不知道如何检查条件。
START TRANSACTION
UPDATE account SET balance = balance - 100 WHERE name = 'D'
UPDATE account SET balance = balance + 100 WHERE name = 'A'
COMMIT
Run Code Online (Sandbox Code Playgroud)
如何在转账前检查足够金额的条件?
我需要存储数据,其生命周期在大多数情况下应该是 1-30 分钟(但仍然可以是 1 天/1 周)。这只是一个特定的项目 - 由许多用户执行的大量批量操作。
因此,处理这些数据的典型过程:
当只有单个用户使用系统时,这很好用。当许多用户上传产生大约 1-5 千行的文档时,这很有效。但是在插入 10,000 行后,SQL Server 会强制锁定表……这是一个问题。
所以,有不同的方法来解决这个问题,但它们都是丑陋的:
我接下来要:关闭对指定表的任何锁定。不需要一致性,只有索引应该工作。
我怎么能做到这一点?任何其他想法也受到赞赏。
我遇到过并行运行许多访问同一个表的程序的情况。当我尝试并行运行这些程序时,我可以看到很少有程序抛出错误ORA-00054: resource busy and acquire with NOWAIT specified or timeout expired。这些表是临时表,我首先删除旧数据然后插入。并再次为下一个程序运行做同样的事情。所以在这种情况下,我遇到了多个过程尝试访问同一个表并尝试执行 DML 操作的情况。我有针对这种情况创建全局临时表的解决方案:
CRATE GLOBAL TEMPORARY TABLE TEMP_ACTIVATE_OPTION(
ID NUMBER,
... -- your columns
)
ON COMMIT DELETE ROWS;
Run Code Online (Sandbox Code Playgroud)
但由于我是这个解决方案的新手,我真的不知道它是如何工作的。例如,如果一个过程正在运行并尝试访问该表TEMP_ACTIVATE_OPTION以进行 DML 操作,而另一个过程并行运行并尝试访问同一个表TEMP_ACTIVATE_OPTION进行 DML 操作,那么是否有可能发生数据丢失或冲突?全局临时表如何管理会话或事务?如果过程尝试对该表执行 dml 操作并等待释放表上的锁以便另一个过程可以访问同一个表,它是否对表执行锁定?
PROCEDURE "EXT_10024_ACTIVATE_OPTION"(IN_KPI_DEF_ID IN NUMBER DEFAULT 0) AS
IN_EVENT_ID NUMBER;
err_code VARCHAR(100);
err_msg VARCHAR(100);
IN_OBJECT_NAME VARCHAR2(100);
CURSOR KPI_DEF_CUR IS
Select KPI_DEF_ID,BUSINESS_CHECK_PERIOD_ID,BUS_CHK_PRD_ID_1,
CASE WHEN BUSINESS_CHECK_PERIOD_UNIT_ID=11 THEN 'MINUTE'
WHEN BUSINESS_CHECK_PERIOD_UNIT_ID=12 THEN 'HOUR'
WHEN BUSINESS_CHECK_PERIOD_UNIT_ID=13 THEN 'DAY'
WHEN BUSINESS_CHECK_PERIOD_UNIT_ID IS NULL THEN …Run Code Online (Sandbox Code Playgroud) 我想用 SP 中的 SELECT 语句锁定表中的一些行。我的 SP 中有交易。我想在 BEGIN TRANSACTION 之后锁定我选择的所有行。所以,我想在 COMMIT/ROLLBACK 之后释放这些行。
我尝试过 XLOCK、UPDLOCK、HOLDLOCK,但它们都没有达到我的预期。
这是我的示例代码...
BEGIN TRANSACTION
-- I WANT TO LOCK EMPLOYEES LIVE IN ISTANBULL
SELECT ID FROM EMPLOYEES WITH(XLOCK) WHERE CITY='ISTANBUL'
....
....
....
COMMIT
-- LOCKED ROWS SHOULD BE RELEASED AFTER COMMIT.
Run Code Online (Sandbox Code Playgroud)
有什么建议吗?
我正在尝试使用 Laravel 5.3 创建一个演示 crud。我写了一个控制器的方法来处理更新。此方法应始终启动事务,并始终回滚更改。所以更改永远不会提交到数据库中。
这是我的方法的样子
public function update($id, Request $request)
{
DB::beginTransaction();
$this->affirm($request);
$biography = Biography::findOrFail($id);
$data = $request->all();
$biography->update($data);
Session::flash('success_message', 'Biography was updated! However, because this is a demo the records are not persisted to the database.');
DB::rollBack();
return redirect()->route('demo.index');
}
Run Code Online (Sandbox Code Playgroud)
不幸的是,更新仍然每次都会提交。如何正确开始事务然后回滚更改?
我运行了一个 SpringMVC 应用程序,并且我将 @Transactional 注释与 HibernateTransactionManager 结合使用。
结果,在我的应用程序中我抛出 RuntimeException 的任何地方,我们都会回滚 - 这太棒了!一切正常。
但现在我想从 Transactionality 中排除一个 Entity。这个实体代表我想要持久化的东西(基准/日志/错误),即使(特别是如果)有一个 RuntimeException 标记了回滚的其他一切。
我宁愿不必从开始和结束事务的拦截器外部调用某个存储库。
有没有直接的方法来实现这一点?
在特殊情况下,从部署在 Apache TomEE 中的应用程序调用我的无状态 EJB 类之一可能需要很长时间,并且事务会被服务器回滚。
如何增加 Apache TomEE 中的 EJB 事务超时?
谢谢你。
我正在开发 Flutter 应用程序,并且正在使用 Firebase 服务。我只想坚持使用事务,因为我更喜欢一致性而不是简单性。
await Firestore.instance.collection('user').document(id).updateData({'name': 'new name'});
await Firestore.instance.runTransaction((transaction) async {
transaction.update(Firestore.instance.collection('user').document(id), {'name': 'new name'});
});
Run Code Online (Sandbox Code Playgroud)
交易有任何(主要)缺点吗?例如,它们是否更贵(Firebase 计费,而不是计算)?毕竟 Firestore 数据库上的数据可能会发生更改,这将导致最多 5 次重试。
供参考:https : //firebase.google.com/docs/firestore/manage-data/transactions
“您还可以使用事务对数据进行原子更改。虽然这对于增加投票总数来说有点笨拙,但对于更复杂的更改来说这是正确的方法。”
https://codelabs.developers.google.com/codelabs/flutter-firebase/#10
transactions ×10
locking ×2
mysql ×2
sql ×2
sql-server ×2
apache-tomee ×1
asp.net ×1
asp.net-mvc ×1
c# ×1
ejb ×1
ethereum ×1
firebase ×1
flutter ×1
hibernate ×1
jakarta-ee ×1
javascript ×1
laravel ×1
metamask ×1
oracle ×1
php ×1
plsql ×1
spring-mvc ×1
t-sql ×1
web3js ×1