当我试图添加一个新人时,我得到一个错误 [Object object]

Posted

技术标签:

【中文标题】当我试图添加一个新人时,我得到一个错误 [Object object]【英文标题】:I get an error [Object object] when Î'm trying to add a new person 【发布时间】:2021-11-29 09:55:48 【问题描述】:

我正在尝试创建我的第一个 Web API,我用 C# 编写后端,用 react js 编写前端。

当我尝试通过站点在数据库中添加新人时,我收到错误[object Object]

但是当我尝试通过 Postman 在数据库中添加新人时,我收到了“添加成功”的消息。

这是我的 js 文件

import React,Component from 'react';
import Modal,Button, Row, Col, Form from 'react-bootstrap';

export class AddDepModal extends Component
    constructor(props)
        super(props);
        this.handleSubmit=this.handleSubmit.bind(this);
    

    handleSubmit(event)
        event.preventDefault();
        fetch(process.env.REACT_APP_API+'department',
            method:'POST',
            headers:
                'Accept':'application/json',
                'Content-Type':'application/json'
            ,
            body:JSON.stringify(
                borzhnuka_id:null,
                borzh_name:event.target.borzh_name.value
            )
        )
        .then(res=>res.json())
        .then((result)=>
            alert(result);
        ,
        (error)=>
            alert('Failed');
        )
    
    render()
        return (
            <div className="container">

<Modal
...this.props
size="lg"

aria-labelledby="contained-modal-title-vcenter"
centered
>
    <Modal.Header clooseButton>
        <Modal.Title id="contained-modal-title-vcenter">
            Додати
        </Modal.Title>
    </Modal.Header>
    <Modal.Body>

        <Row>
            <Col sm=6>
                <Form onSubmit=this.handleSubmit>
                    <Form.Group controlId="borzh_name">
                        <Form.Label>Ім'я</Form.Label>
                        <Form.Control type="text" name="borzh_name" required 
                        placeholder="borzh_name"/>
                    </Form.Group>

                    <Form.Group controlId="borzh_last_name">
                        <Form.Label>Прізвище</Form.Label>
                        <Form.Control type="text" name="borzh_last_name" required 
                        placeholder="borzh_last_name"/>
                    </Form.Group>

                    <Form.Group controlId="amount">
                        <Form.Label>Amount</Form.Label>
                        <Form.Control type="int" name="amount" required 
                        placeholder="amount"/>
                    </Form.Group>
                    
                    <Form.Group controlId="Date_of_offer">
                        <Form.Label>Дата приєднання</Form.Label>
                        <Form.Control 
                        type="date"
                        name="Date_of_offer"
                        required
                        placeholder="Date_of_offer"
                        />
                       
                        
                    </Form.Group>
                    <Form.Group>
                        <Button variant="primary" type="submit">
                            Додати
                        </Button>
                    </Form.Group>
                </Form>
            </Col>
        </Row>
    </Modal.Body>
    
    <Modal.Footer>
        <Button variant="danger" onClick=this.props.onHide>Close</Button>
    </Modal.Footer>
</Modal>
            </div>
        )
    

这是 C# 文件中的 POST 处理程序:

[HttpPost]
public JsonResult Post(Department dep)

    string query = @"insert into dbo.All_borzh values
                     ('" + dep.borzhnuka_id + @"',
                     '" + dep.borzh_name + @"',
                     '" + dep.borzh_last_name + @"',
                     '" + dep.amount + @"',
                     '" + dep.Date_of_offer + @"')
                     ";

    DataTable table = new DataTable();
    string sqlDataSource = _configuration.GetConnectionString("EmployeeAppCon");
    SqlDataReader myReader;

    using (SqlConnection myCon = new SqlConnection(sqlDataSource))
    
        myCon.Open();

        using (SqlCommand myCommand = new SqlCommand(query, myCon))
        
            myReader = myCommand.ExecuteReader();
            table.Load(myReader); ;
            myReader.Close();
            myCon.Close();
        
    

    return new JsonResult("Added successfully");

【问题讨论】:

SQL Injection alert - 你应该永远将你的 SQL 语句连接在一起 - 使用 参数化查询 来避免 SQL注入 - 查看Little Bobby Tables 另外——对于INSERT,你不应该使用.ExecuteReader()方法——毕竟,你不是读取从SQL Server返回的任何数据——你重新添加新数据。使用.ExecuteNonQuery(),然后你可以删除它周围所有不需要的东西(阅读器、数据表等)..... 你能举例“使用 .ExecuteNonQuery() 然后你可以把它周围的所有东西都扔掉” 【参考方案1】:

我的意思是这样的:

正确参数化您的 SQL 查询 - 永远不会将您的 SQL 语句和要发送到服务器的值连接在一起! SQL 注入警报!

您不需要DataTable,也不需要SqlDataReader - 只需使用.ExecuteNonQuery() 即可完成

您的 INSERT 语句应该真正明确列出您要插入的列的名称 - 公认的最佳实践 - 就这样做

试试这个代码:

[HttpPost]
public JsonResult Post(Department dep)

    // properly **parametrize** your query! 
    string query = @"INSERT INTO dbo.All_borzh(list-of-columns-here) 
                     VALUES (@Id, @Name, @LastName, @Amount, @DateOfOffer);";
    
    string connectionString = _configuration.GetConnectionString("EmployeeAppCon");
    
    // setup connection and command
    using (SqlConnection myCon = new SqlConnection(connectionString))
    using (SqlCommand myCmd = new SqlCommand(query, myCon))
    
        // add parameters and values
        myCmd.Parameters.Add("@Id", SqlDbType.Int).Value = dep.borzhnuka_id;
        // Here, I'm just *guessing* what those datatypes and string lengths are - adapt as needed!
        myCmd.Parameters.Add("@Name", SqlDbType.VarChar, 100).Value = dep.borzh_name;
        myCmd.Parameters.Add("@LastName", SqlDbType.VarChar, 100).Value = dep.borzh_last_name;
        myCmd.Parameters.Add("@Amount", SqlDbType.Decimal, 20, 4).Value = dep.amount;
        myCmd.Parameters.Add("@DateOfOffer", SqlDbType.Date).Value = dep.Date_of_offer;
        
        // open connection, execute query, close connection
        myCon.Open();
        
        int numberOfRowsInserted = myCmd.ExecuteNonQuery();
        
        myCon.Close();
    

    return new JsonResult("Added successfully");

【讨论】:

同样的错误)

以上是关于当我试图添加一个新人时,我得到一个错误 [Object object]的主要内容,如果未能解决你的问题,请参考以下文章

当我在窗口中间放一个圆圈时,我得到一个错误

现有文件的404错误

如何定位我的变量是多驱动的?

试图找到一个区域名称的名称 - 得到错误13类型不匹配

在webUI中添加principalalsQuery不允许使用空格

PHP当我调用函数时我得到了致命的错误