如何使用.NET中的ReplaceRows.Google.Apis.Fusiontables.v2(stream csv)?

时间:2015-01-08 19:58:44

标签: google-maps google-fusion-tables google-api-dotnet-client

目标:通过使用ReplaceRows()从没有标头的csv文件中替换旧行来更新旧表。

我正在使用Google.Apis.Fusiontables.v2库。

我已阅读并重新阅读documentation,但仍然无法使我的代码正常工作。

身份验证正在运行,我可以毫无问题地执行简单的INSERT:

string sql = "INSERT INTO 11t9VLt3vzb46oGQMaS2LTSPWUyBYNcfi1shkmvag (rpu_id, NO_BAIL, 'Usage (description)', 'Use (description)', 'Sup. louable m2', 'Sup. Utilisable m2', 'SumTotal Lou', 'Percent Lou', 'SumTotal Util', 'Percent Util') VALUES (9999,1111,'Test','Test En',1,2,3,4,5,6)"
Sqlresponse sqlRspnse = service.Query.Sql(sql).Execute();

我没有直接从TableResource类尝试ReplaceRowsMediaUploadReplaceRowsMediaUpload

从服务对象调用上传函数不会出错,但我不确定下一步该做什么会实际替换Fusion Table中的行(服务是FusiontablesService):

StreamReader str = new StreamReader(Server.MapPath("~") + @"\sample2.csv");
service.Table.ReplaceRows("1X7JMLFy75uq20UnU6cLrGTTDfp6lLuD1Fc3vYYjQ", str.BaseStream, "text/csv").Upload();

我试过了:

service.Table.ReplaceRows("1X7JMLFy75uq20UnU6cLrGTTDfp6lLuD1Fc3vYYjQ").Execute()

上传后,但这只是将Fusion表置于“卡住”模式。

有人可以提供使ReplaceRows工作所需的行吗? (解释将不胜感激,但不是必要的!)。

2 个答案:

答案 0 :(得分:2)

您应该为“application / octet-stream”更改“text / csv”。 (请参阅此处接受的MIME类型:https://developers.google.com/fusiontables/docs/v2/reference/table/replaceRows

StreamReader str = new StreamReader(Server.MapPath("~") + @"\sample2.csv");
service.Table.ReplaceRows("1X7JMLFy75uq20UnU6cLrGTTDfp6lLuD1Fc3vYYjQ", str.BaseStream, "application/octet-stream").Upload();

对上传的调用应该足够了。

另外,尝试创建一个新表来测试它,以确保它设置正确。

答案 1 :(得分:0)

您可以使用REST API调用直接替换Google Fusion表中的行,而不是编写方法来执行此操作。这是一个例子:

POST https://www.googleapis.com/upload/fusiontables/v2/tables/tableId/replace

有关详细信息,请参阅this文档,它也有测试环境工具。